正则表达式会忽略少量字符,直到找到提及的模式

时间:2019-04-01 07:14:52

标签: c# regex

我必须在pdf中找到一个小数,该小数位于“费用”列下。

因此,我遇到了正则表达式以找到可以正常工作的小数。但是在其中一份pdf文件中,我采用以下格式。

Pdf文本-收费(国家/地区)1.811.8和75/100 18,181.75 预计-18,181.75

用于查找文本“ Charge”后的小数的正则表达式:(Charge([0-9] *)(\ ,? []?[0-9])+(。[0-9 ] +))

因此,我想忽略“ charge”和小数点中间出现的任何内容。并显示十进制数字。有帮助吗?

情况2:“ 18,181.75”有时也可能出现在“收费”之前。就像“ 18,181.75在这里收取一些文字...”

3 个答案:

答案 0 :(得分:2)

您可以利用.NET regex无限制宽度的隐藏方式:

Regex.Match(s, @"(?<=\bCharge\b.*)\d[\d,]*\.\d+|\d[\d,]*\.\d+(?=.*?\bCharge\b)")

请参见regex demo

详细信息

  • (?<=\bCharge\b.*)\d[\d,]*\.\d+-整体上以Charge开头的位置,其后带有除换行符以外的其他字符,然后匹配一个数字,后跟0+个逗号或数字,然后是一个点和一个1+数字
  • |-或
  • \d[\d,]*\.\d+(?=.*?\bCharge\b)-一个数字,后跟0+个逗号或数字,然后是一个点和1+个数字,并且后跟除换行符以外的任何0+个字符,其后应尽可能少,然后是{{1} }作为一个整体

enter image description here

答案 1 :(得分:0)

下面的正则表达式应该会对您有所帮助。

new_list = [",".join(map(str, (list(a) + b))) for a, b in zip(s1, s2)]

希望这行得通。

答案 2 :(得分:0)

那呢:

(?<= [Cc] harge。)([0-9] ,[0-9] 。[0-9] )| [0- 9] ,[0-9] 。[0-9] (?= \ s [Cc] harge)