【问题标题】:Regular Expression: Extract the lines正则表达式:提取行
【发布时间】:2013-05-28 07:52:37
【问题描述】:

我尝试使用正则表达式提取 name1(第一行)、name2(第二行)、name3(第三行)和街道名称(最后一行):

Company Inc.
JohnDoe
Foobar
Industrieterrein 13

最后一行是街道名称,这部分已经在工作(文本存储在变量“S2”中)。

REGEXREPLACE(S2, "(.*\n)+(?!(.*\n))", "")

这个表达式将返回给我最后一行。我也可以提取第一行:

REGEXREPLACE(S2, "(\n.*)", "")

我的问题是,我不知道如何提取第二行和第三行....

另外,我如何测试文本是否包含一、二、三行或更多行?

更新

正则表达式用于 Scribe(一种 ETL 工具)的上下文中。问题是我无法执行源代码,我只有以下功能:

  • REGEXMATCH(input, pattern)
  • REGEXREPLACE(input, pattern, replacement)

【问题讨论】:

  • 您使用什么编程语言?否则我们怎么知道如何测试有多少行?
  • 不需要正则表达式,至少不需要高级模式匹配 - 只需 split 换行符上的文本(使用您的语言提供的任何拆分实现)。
  • 可能比我的正则表达式解决方案@CBroe 更好的答案
  • 正则表达式用于 Scribe(一种 ETL 工具)的上下文中。问题是我无法执行源代码,我只有以下函数:“REGEXMATCH(input, pattern)”和“REGEXREPLACE(input,pattern,replacement)”
  • 语言是否允许前瞻?

标签: regex


【解决方案1】:

如果正则表达式语言支持前瞻,您可以倒数行数,从而得到(假设 . 不匹配换行符)

(.*)$                   # matching the last line
(.*)(?=(\n.*){1}$)      # matching the second last line (excl. newline)
(.*)(?=(\n.*){2}$)      # matching the third last line (excl. newline)

【讨论】:

  • 您好,我只能使用函数“REGEXREPLACE(输入,模式,替换)”。问题是:我如何在这种情况下使用你的表达方式?所以我需要的是“匹配所有,除了第二行并用空字符串替换”?
  • @thuld 我是否理解正确,您只想保留第二行?那么为什么不使用REGEXREPLACE(REGEXREPLACE(input,"^.*\n",""),"\n(\n|.)*","") - 内部替换删除第一行,外部替换删除第一行之后的任何内容。
  • 是的,要求的一部分是第二行的摘录。明天我会测试你的推荐,谢谢你的帮助!最后一个问题:你同意这个声明将保留第三行吗? REGEXREPLACE( REGEXREPLACE(REGEXREPLACE(input,"^.*\n",""),"^.*\n",""),"\n(\n|.)*","" )
【解决方案2】:

只需使用这个正则表达式:

(.+)+

解释:

. 通配符:匹配除\n 之外的任何单个字符。

+ 匹配前一个元素一次或多次。

【讨论】:

    【解决方案3】:

    至于将匹配四行中的每一行的正则表达式,如何:

    (.*?)\n(.*?)\n(.*?)\n(.*)
    

    括号将匹配,\n 将匹配一个新行。注意:您可能必须使用\r\n 而不仅仅是\n,具体取决于;两个都试试。

    【讨论】:

    • 好的,所以用这个表达式我可以测试文本是否包含 1, 2, 3,... 行。但是如何替换除第二行之外的所有内容?
    • 根据您的回答猜测,类似于REGEXREPLACE(S2, "(.*?)\n(.*?)\n(.*?)\n(.*)", "replaced\n\2\nreplaced\nreplaced")。 2 是反向引用。它应该代表正则表达式中的第二个括号。但根据编程语言的不同,它可能是不同的数字,也可能是$2
    【解决方案4】:

    您可以尝试以下方法:

    ((.*?)\n){3}

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 2016-09-09
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多