正则表达式 - 只捕获没有旁边有一个字母的数字
我有一个任务来创建程序,匹配数字前面没有数字。例如:正则表达式 - 只捕获没有旁边有一个字母的数字
6X^2 + 6X + 6-57 + 8-9-90x
我试图用正则表达式与+或捕捉到所有的数字 - 在他们面前 - 但没有x之后。我试过
\[+-](\d+)[^x]
,但它似乎捕捉到“-90”从“-90x”为好。
正确的正则表达式将是这样的:
@"[+-]((?>\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
你是Godsent。 – Netheous
如果你解释了*为什么*,那么这个答案会更好,也就是说,OP在他/她的表达中失败了什么。 –
太好了。为我正在寻找的'Atomic Group'+1。但我会添加一些使用正则表达式的解释。 –
的主要问题与原来的正则表达式是所述[
转义并且因此字面[
匹配,另一个问题是与(\d+)[^x]
捕获1+数字和捕获到组1,然后一个[^x]
匹配任何炭但x
。这意味着它也可能匹配一个数字(如在你的情况下,与-90x
,[+-]
匹配-
,(\d+)
匹配和捕获9
和[^x]
匹配0
)。
一个更合适的正则表达式是为包括\d
图案与x
到负先行:
[+-](\d+)(?![\dx])
图案的详细资料:
-
[+-]
- 要么+
或-
-
(\d+)
- 捕获组1匹配1个或多个数字 -
(?![\dx])
- 失败比赛如果1+数字的负先行后面跟着一个数字或x
。
你知道正则表达式作为匹配字符模式正在被搜索的字符串的模板。这意味着它是一个布尔函数。我不知道“捕获”是什么意思。 – yazanpro
我希望它只是没有找到X的数字,所以我可以代替他们。 – Netheous
它捕捉'“-90''或在探微'” 90''从''-90x''?如果第一,这似乎并不正常,如果第二次,也许它capures最后的“X”,而不是首先是因为有其他迹象“6X”后,使其与'^ x'匹配。它不能匹配'90x',因为没有其他字符。我认为,'[^ X]'是错在这里 – Kaddath