正则表达式在特定匹配词之后得到词

时间:2018-08-04 17:48:42

标签: regex

我正试图从某些发票中提取美元金额。我需要在单词“ 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”之后的所有内容都拉出。我只想要下一个词。

5 个答案:

答案 0 :(得分:1)

您可以做的是匹配总数,后跟一个可选的冒号:?和零次或多次空白字符\s*,并捕获一个或多个数字,然后是一个与数字匹配的可选部分点和一个或多个数字。

要匹配总计的大写或小写字母,您可以通过添加modifier (?i)或使用不区分大小写的标志来使匹配不区分大小写。

\btotal:?\s*(\d+(?:\.\d+)?)

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)

您可以使用下面的正则表达式来计算TOTAL之后的金额:

cl.exe

它将捕获第一组中的金额。

链接:https://regex101.com/r/tzze8J/1/

答案 4 :(得分:0)

尝试以下模式:TOTAL:? ?(\d+.\d+)[^\d]?

Demo