我试图在每行的末尾提取£值:
小计测试测试£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之后,我认为下一步只是将£.*
添加到末尾,但这仍然返回相同的内容。有人可以告诉我我要去哪里了吗?谢谢
答案 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.*)(£.+)$)