正则表达式捕获不包含字符串的前两行

时间:2019-04-16 08:58:00

标签: regex

我正在努力寻找一种使用正则表达式提取地址的前两行的方法,该方法不包含“帐户”一词。

如果我们使用这个地址:

  

公司名称
一些路
一些镇

我可以使用正则表达式(?:.*\s*){2}返回

  

公司名称之路

哪个很棒。

但是,如果顶部有多余的一行,则地址变为:

  

应付帐款
公司名称
一些路
一些镇

然后它不再接我想要的那两行。

我在这里尝试了Regular expression to match a line that doesn't contain a word?的方法,但没有成功,并且还尝试过使用(?!Account.*)(?:.*\s*){3}之类的方法,但是效果不佳。

Microsoft网站https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference可以使用大量字符等,但我还没有设法使组合正常工作。

距离我最近的是使用[^Account.*](?:.*\s*){3}并返回

  

应付    公司名    一条路

我只是无法删除该行的其余部分!任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在多行模式下使用^

(?m)^(?!Accounts)(?:.*\n?){2}

或者(更有效率,并遵循最佳做法):

(?m)^(?!Accounts).*(?:\n.*)?

请参见regex demothis regex demo

(?m)添加到模式中时,^匹配行的开始,并且整个模式都匹配

  • ^-一行的开头
  • (?!Accounts)-以Accounts作为第一个单词
  • (?:.*\n?){2}-除换行符以外的任意0+字符出现两次,后跟可选的换行符
  • .*(?:\n.*)?-匹配一行和随后的可选行。