我正在努力寻找一种使用正则表达式提取地址的前两行的方法,该方法不包含“帐户”一词。
如果我们使用这个地址:
公司名称
一些路
一些镇
我可以使用正则表达式(?:.*\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}
并返回
应付 公司名 一条路
我只是无法删除该行的其余部分!任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
您可以在多行模式下使用^
:
(?m)^(?!Accounts)(?:.*\n?){2}
或者(更有效率,并遵循最佳做法):
(?m)^(?!Accounts).*(?:\n.*)?
请参见regex demo和this regex demo。
将(?m)
添加到模式中时,^
匹配行的开始,并且整个模式都匹配
^
-一行的开头(?!Accounts)
-以Accounts
作为第一个单词(?:.*\n?){2}
-除换行符以外的任意0+字符出现两次,后跟可选的换行符.*(?:\n.*)?
-匹配一行和随后的可选行。