我有一個任務來創建程序,匹配數字前面沒有數字。例如:正則表達式 - 只捕獲沒有旁邊有一個字母的數字
6X^2 + 6X + 6-57 + 8-9-90x
我試圖用正則表達式與+或捕捉到所有的數字 - 在他們面前 - 但沒有x之後。我試過
\[+-](\d+)[^x]
,但它似乎捕捉到「-90」從「-90x」爲好。
我有一個任務來創建程序,匹配數字前面沒有數字。例如:正則表達式 - 只捕獲沒有旁邊有一個字母的數字
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