正则表达式 - 只捕获旁边没有字母的数字

时间:2017-01-23 17:54:06

标签: c# regex

我有一个创建程序的任务,该程序匹配数字,而不包含数字。例如:

  

6X ^ 2 + 6×+ 6-57 + 8-9-90x

我尝试使用正则表达式来捕获所有带有+或 - 的数字,但之后没有x。我试过了

\[+-](\d+)[^x]

但似乎抓住了' -90'来自' -90x'同样。

2 个答案:

答案 0 :(得分:8)

正确的正则表达式是:

@"[+-]((?>\d+))(?!x)"

替代非.NET解决方案:

[+-](\d++)(?!x)
@"
[+-]            // Prefix non captured
(               // Begin capturing group
    (?>         // Begin atomic (non-backtracking) group - this part is essential
        \d+     // One or more digits
    )           // End atomic group
)               // End capturing group
(?!             // Begin negative lookahead
    x           // 'x' literal
)               // End negative lookahead
"

您可以对其进行测试here

答案 1 :(得分:0)

原始正则表达式的主要问题是[已转义且文字[因此匹配,另一个问题是(\d+)[^x]捕获1位数并捕获到第1组然后[^x]匹配任何字符x。这意味着它也可能匹配一个数字(在您的情况下,与-90x匹配,[+-]匹配-(\d+)匹配并捕获9和{{ 1}}匹配[^x])。

更合适的正则表达式是将0模式与\d包含在否定前瞻中:

x

请参阅regex demo

模式详情

  • [+-](\d+)(?![\dx]) - [+-]+
  • - - 捕获第1组匹配1位或更多位数
  • (\d+) - 如果1位数后跟一位数字或(?![\dx]),则表示匹配失败。