假設我有一個詞AB1234XZY
甚至1AB1234XYZ
。正則表達式代碼不起作用(Python)
我想提取只有'AB1234'或1AB1234
(即一切,直到最後的字母)。
我用下面的代碼來提取,但它不工作:
base= re.match(r"^(\D+)(\d+)", word).group(0)
當我print base
,它不工作的第二種情況。任何想法爲什麼?
假設我有一個詞AB1234XZY
甚至1AB1234XYZ
。正則表達式代碼不起作用(Python)
我想提取只有'AB1234'或1AB1234
(即一切,直到最後的字母)。
我用下面的代碼來提取,但它不工作:
base= re.match(r"^(\D+)(\d+)", word).group(0)
當我print base
,它不工作的第二種情況。任何想法爲什麼?
,因爲它有一個開始你的正則表達式不第二種情況工作數;模式開始處的\D
與不是數字的任何內容匹配。
對於這個 --simpler,你應該可以使用一些相當簡單的事情,事實上,比我在這裏看到的任何東西都要簡單。
'.*\d'
就是這樣!這應該匹配包括字符串中最後一個數字在內的所有內容,然後忽略所有內容。
Here's the pattern working online,所以你可以看看自己。
謝謝!!!!我知道必須有一個更簡單的方法。並感謝您向我介紹RegexPlanet。那個網站很棒。 – user1328021
(.+?\d+)\w+
會給你你想要的。
甚至像這樣
^(.+?)[a-zA-Z]+$
如果我是你,我會做出最初的'。+'貪婪,因爲這對'12AB1234XYZ'(開始時有兩個或更多數字)不起作用。但是,它應該適用於他的樣本。 –
re.match
開始在字符串的開頭,並re.search
簡單尋找它的字符串中。都返回第一場比賽。 .group(0)
是包含在比賽中的所有東西,如果你有捕獲組,那麼.group(1)
是第一個組......等等等等......與常規約定相反,其中0是第一個索引,在這種情況下,0是一個特殊用例意味着一切。
在你的情況下,取決於你真正需要捕獲什麼,也許使用re.search
更好。而不是使用2組,您可以使用(\D+\d+)
記住,它將捕獲第一個(非數字,數字)組。對你來說可能就足夠了,但你可能想要更具體。
「結尾的字母前的一切」讀您的評論後
這正則表達式是你所需要的:
regex = re.compile(r'(.+)[A-Za-z]')
're.match'和're.search'應該沒什麼關係,因爲他使用'^'錨。這迫使匹配從字符串的開始處開始。 –
你想在兩種情況下都匹配到「123」嗎?如果您有不同的號碼: - AB123452A? –
你想匹配文本之間的數字嗎? – pogo
我想提取AB1234,所以基本上所有的東西都在最後的字母之前。我很確定我之前在那裏工作的代碼... – user1328021