我正试图从某些发票中提取美元金额。我需要在单词“ TOTAL”之后直接在单词 上进行匹配。另外,单词Total有时可能会在后面带有冒号(即Total:
)。文本示例如下所示:
4次发现信用购买-c REF#:02353R总计: 40.00 帮助:1523Q1Q TC:mzQm 40.00更改0.00已售商品总数= 0 12/23/17 Ql:38piii 414 9 76 1G6谢谢您的购物KR08ER立即招聘-立即申请!
对于上述示例,匹配项应为"40.00"
。
我写的Regex语句:
(?<=total)([^\n\r]*)
将“ total”之后的所有内容都拉出。我只想要下一个词。
答案 0 :(得分:1)
您可以做的是匹配总数,后跟一个可选的冒号:?
和零次或多次空白字符\s*
,并捕获一个或多个数字,然后是一个与数字匹配的可选部分点和一个或多个数字。
要匹配总计的大写或小写字母,您可以通过添加modifier (?i)
或使用不区分大小写的标志来使匹配不区分大小写。
值40.00
将在组1中。
答案 1 :(得分:1)
说明在正则表达式模式中。
string str = "4 Discover Credit Purchase - c REF#: 02353R TOTAL: 40.00 AID: 1523Q1Q";
string pattern = @"(?ix) # 'i' means case-insensitive search
\b # Word boundary
total # 'TOTAL' or 'total' or any other combination of cases
:? # Matches colon if it exists
\s+ # One or more spaces
(\d+\.\d+) # Sought number saved into group
\s # One space";
// The number is in the first group: Groups[1]
Console.WriteLine(Regex.Match(str, pattern).Groups[1].Value);
答案 2 :(得分:1)
(到目前为止,与其他答案不同)此匹配项仅匹配 总数(即无需检查组):
((?<=\bTOTAL\b )|(?<=\bTOTAL\b: ))[\d.]+
当输入中有TOTAL
之后的冒号时,请参见live demo匹配。
需要2个向后看(不捕获输入)的原因是它们不能具有可变长度。可选冒号是通过使用2个向后看的交替(正则表达式或通过...|...
)来处理的,一个带有冒号,另一个不带有冒号。
如果在任何情况下都可以使用TOTAL
,请在正则表达式的开头添加(?i)
(忽略大小写标志)。
答案 3 :(得分:0)
答案 4 :(得分:0)
尝试以下模式:TOTAL:? ?(\d+.\d+)[^\d]?
。