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

问题描述:

我有一个任务来创建程序,匹配数字前面没有数字。例如:正则表达式 - 只捕获没有旁边有一个字母的数字

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

我试图用正则表达式与+或捕捉到所有的数字 - 在他们面前 - 但没有x之后。我试过

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

,但它似乎捕捉到“-90”从“-90x”为好。

+0

你知道正则表达式作为匹配字符模式正在被搜索的字符串的模板。这意味着它是一个布尔函数。我不知道“捕获”是什么意思。 – yazanpro

+0

我希望它只是没有找到X的数字,所以我可以代替他们。 – Netheous

+0

它捕捉'“-90''或在探微'” 90''从''-90x''?如果第一,这似乎并不正常,如果第二次,也许它capures最后的“X”,而不是首先是因为有其他迹象“6X”后,使其与'^ x'匹配。它不能匹配'90x',因为没有其他字符。我认为,'[^ X]'是错在这里 – Kaddath

正确的正则表达式将是这样的:

@"[+-]((?>\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

你是Godsent。 – Netheous

+0

如果你解释了*为什么*,那么这个答案会更好,也就是说,OP在他/她的表达中失败了什么。 –

+0

太好了。为我正在寻找的'Atomic Group'+1。但我会添加一些使用正则表达式的解释。 –

的主要问题与原来的正则表达式是所述[转义并且因此字面[匹配,另一个问题是与(\d+)[^x]捕获1+数字和捕获到组1,然后一个[^x]匹配任何炭但x。这意味着它也可能匹配一个数字(如在你的情况下,与-90x,[+-]匹配-(\d+)匹配和捕获9[^x]匹配0)。

一个更合适的正则表达式是为包括\d图案与x到负先行:

[+-](\d+)(?![\dx]) 

regex demo

图案的详细资料

  • [+-] - 要么+-
  • (\d+) - 捕获组1匹配1个或多个数字
  • (?![\dx]) - 失败比赛如果1+数字的负先行后面跟着一个数字或x