如何正则表达式和提取甚至新的行直到匹配

时间:2016-12-12 07:35:33

标签: regex talend

我已经使用正则表达式在#34; Abc 123"之后成功提取任何内容。但它并没有从新行中提取任何东西。

enter image description here

有什么方法可以使用正则表达式来提取以下内容:

"Abc 123 def
ghi
jkl"
"Abc 123 def ghi jkl mno"
"Abc 123 def ghi jkl 
mno"

我在Talend中使用Regex。

2 个答案:

答案 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行