不是以字符串开头的每一行中的值的正则表达式

时间:2019-05-22 12:46:03

标签: .net regex

我试图在每行的末尾提取£值:

  

小计测试测试£20.00
  值£10.00
  小计测试2£4.00
  价值2£30.00

除了我不想包括任何以“小计”开头的行

因此,为了清楚起见,在此示例中,我只想返回:

  

£10.00
  £30.00

到目前为止,我取得的成功有限,其中有一些SO示例,包括How to match a line not containing a word。尝试使用此(https://regex101.com/r/NcXg2m/1)使我开始:

(?m)^(?!Subtotal.*).*

对于不是以“小计”开头的所有内容,我都会给出整行。

浏览https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference之后,我认为下一步只是将£.*添加到末尾,但这仍然返回相同的内容。有人可以告诉我我要去哪里了吗?谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用

(?m)(?<!^Subtotal.*)£[0-9.]+(?=\s*$)

详细信息

  • (?m)-多行标志,使^匹配行的开头,$匹配行的结尾
  • (?<!^Subtotal.*)-向后的否定性匹配,该匹配的位置不立即位于Subtotal之前,并且在字符串的开头不包含任何0+字符
  • £-一个£符号
  • [0-9.]+-1个或多个数字或点
  • (?=\s*$)-一个正向超前查询,它与紧随其后的位置相匹配,后跟0+空格和一行的结尾。

请参见regex demo

答案 1 :(得分:0)

进一步研究之后,我有了一些可行的方法。最后,这是@Erwan的回复和@WiktorStribiżew的回复的组合:

该软件要求我使用多行(?m)指令。结合以上注释中的两者,可以完成以下工作:

(?m)((?<!^Subtotal.*)(£.+)$)