2013-02-25 41 views
0

我在一個字符串中有這個多項式。如何製作只匹配整數的正則表達式?

x^3+0.125x+2 

我想在這裏匹配3和2,但不是0.125。只是整數。我現在最好的是這個,但這仍然與0.125中的25匹配。

(?<!\.)\d+(?!\.) 
+0

「我來了迄今最好的是這個」?是什麼*?你用哪種語言進行編程? – Johnsyweb 2013-02-25 00:35:48

+1

對不起,我沒有把正則表達式放在代碼塊中。我沒有正確渲染。我在python編程。 – 2013-02-25 00:39:46

+0

複製了錯誤的正則表達式。這是正確的。這可能是時候去睡覺了。 – 2013-02-25 00:42:42

回答

1

你可以試試這個:

>>> import re 
>>> re.findall(r'(?<!\.)\b\d+\b(?!\.)', "x^3+0.125x+2") 
['3', '2'] 

使用\b\d+\b確保匹配整個號碼

+0

謝謝。它正是我所需要的。我沒有想到使用\ b。 – 2013-02-25 00:45:58

+0

它與整數網不匹配'x'或其他字母。我將它改爲「(?<!\。)(\ b |(?<= \ D))\ d +(\ b |(?= \ D))(?!\。)」魅力。感謝您的幫助。 – 2013-02-25 01:06:03

+0

它不接受數字前面的減號,但它對我來說不是必要的。我的計劃是使用它將整數轉換爲浮點數,在它們後面添加一個點。我可能會做一個稍後接受減號的人。 – 2013-02-25 01:18:14

1

的整數是一個數字僅包含數字,可選eE(僅當其次是數字),並可選地以-開頭。在左邊只能有一個非數字和非字母(因爲x2將被視爲一個變量名)或者什麼也不是。右邊只能有一個非數字或沒有任何數字(右邊的2x將是)。

下面的模式應該在一個字符串根據給定的規格相匹配的所有整數:

r'(?:^|(?<=[^\d\w\.]))(?:(?:(?<![\d\w])|^)\-)?\d+(?:[eE]\d+)?(?!\.)(?=[^\d]|$)'' 
+0

這是一個很好的。前一個答案中的答案符合我的要求,但這個答案令人印象深刻。我將不得不給它更詳細的外觀。 – 2013-02-27 17:24:08