Regex 正则表达式以获取特定匹配词之后的词

Regex 正则表达式以获取特定匹配词之后的词,regex,Regex,我试图从一些发票中提取美元金额。我需要在单词“TOTAL”后面的单词上直接匹配。此外,单词total有时可能在后面加一个冒号(即total:)。示例文本示例如下所示: 4发现信用卡购买-c参考:02353R总计:40.00AID:1523Q1Q TC:mzQm 40.00更改0.00售出商品总数=0 12/23/17 Ql:38piii 414 9 76 1G6感谢您购买KR08ER立即招聘-立即申请 对于上述示例,匹配项应为“40.00” 我写的正则表达式声明: (?<=total)([

我试图从一些发票中提取美元金额。我需要在单词“TOTAL”后面的单词上直接匹配。此外,单词total有时可能在后面加一个冒号(即
total:
)。示例文本示例如下所示:

4发现信用卡购买-c参考:02353R总计:40.00AID:1523Q1Q TC:mzQm 40.00更改0.00售出商品总数=0 12/23/17 Ql:38piii 414 9 76 1G6感谢您购买KR08ER立即招聘-立即申请

对于上述示例,匹配项应为
“40.00”

我写的正则表达式声明:

(?<=total)([^\n\r]*)

(?您可以使用下面的正则表达式来获取合计后的金额:

\bTOTAL\b:?\s*([\d.]+)
它将捕获第一组中的金额


链接:

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

要匹配total的大写或小写变体,可以通过添加
(?i)
或使用不区分大小写的标志等方式使匹配不区分大小写


40.00
将在组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);

尝试此模式:
TOTAL:??(\d+。\d+[^\d]?

这(与目前为止的其他答案不同)只匹配总量(即不需要检查组):


(?是否与“TOTAL”匹配?必须使用不区分大小写的。它将与“TOTAL”或“TOTAL”匹配:但是它不应该区分大小写。但是,您提供的查询包含单词total。我只需要单词total后面的单词。+1,但是根据正则表达式的风格,也可以使用reset运算符作为
\b总:?\s*\K\d+(?:\。\d+)?
以防止捕获。这似乎起到了作用!它只匹配我所需的总量。这很简洁,+1。但是如果使用
(?:(?@UnerableLightness regex实际上是一种只写语言,所以我将可读性排在第二位(最小值)性能。在这种情况下,捕获的组是不相关的,因为整个匹配是目标,所以我可以省略
?:
噪声,而不会失去有效性,同时获得(尽管很小)可读性。至于“性能”原因是,您将很难检测到可测量的差异。虽然此代码可能会回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
((?<=\bTOTAL\b )|(?<=\bTOTAL\b: ))[\d.]+