我已经使用正则表达式在#34; Abc 123"之后成功提取任何内容。但它并没有从新行中提取任何东西。
有什么方法可以使用正则表达式来提取以下内容:
"Abc 123 def
ghi
jkl"
"Abc 123 def ghi jkl mno"
"Abc 123 def ghi jkl
mno"
我在Talend中使用Regex。
答案 0 :(得分:1)
我认为你想要提取从1行字符开始的行开头的子字符串,然后是一个空格,然后是1位或更多位数,并跨越多行,直到相同的模式。
您可以使用以下正则表达式(请注意,标记和符号可能因您使用的语言而异):
/^(\w+)\s(\d+)(.*(?:\r?\n(?!\w+\s\d).*)*)/gm
请参阅regex demo。
<强>详情:
^
- 开始行(\w+)
- 第1组:一个或多个单词字符\s
- 1个空格(\d+)
- 第2组:一个或多个数字(.*(?:\r?\n(?!\w+\s\d).*)*)
- 第3组:
.*
- 除了换行符之外的任何0 +字符(?:\r?\n(?!\w+\s\d).*)*
- 零个或多个序列:
\r?\n
- 换行... (?!\w+\s\d)
- 没有跟随1个字的字符,空格,1 +位数.*
- 除了换行符之外的任何0 +字符答案 1 :(得分:0)
(\w)+\s(\d+)((.|\R)+)
是你想要的,所以在逃避后它将是:
(\\w)+\\s(\\d+)((.|\\R)+)
。
\R
是自Java 8以来Java regex中的一个新组 - 它代表换行符。两者:\r\n
和\n
。
如果您只允许一次换行:
(\w)+\s(\d+)((.+)(\R.+){0,1})
我认为您应该指定更多您想要的输出,但是从这个答案中您可以了解如何包含多行或最多2行