我有一個像這樣的字符串:s = "Abc 3456789 cbd 0045678 def 12345663333"print(re.findall(r"(?<!\d)\d{7}(?!\d)", s))Ouput is : 3456789 and 0045678但我只想得到 3456789。我該怎么做呢?
3 回答

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
這將做到這一點:^\D+(\d+)\s
在字符串的開頭^
,有任何非數字字符\D+
,后跟任意數量的數字\d+
,這些數字將被捕獲(\d+)
,并且后面需要跟一個空格\s
。
請參閱: https: //regex101.com/r/ZuGJ7l/1

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
如果您要查找不以 0 開頭的數字,請使用[1-9]
第一個數字和\d
其余數字。
例如,要查找長度為 7 的(根據標題),這將為您提供:
re.findall(r'(?<!\d)[1-9]\d{6}(?!\d)', s)
換句話說,一個非零數字后跟 6 位數字,整個數字之前或之后都沒有數字(根據負向前看和負向后看斷言),
對于您當前的示例字符串將產生:
['3456789']
如果你想要長度不是7 的,你可以使用:
re.findall(r'(?<!\d)[1-9](?:\d{,5}|\d{7,})(?!\d)', s)
換句話說,一個非零數字后跟 <= 5 或 >= 7 位數字(即除 6 之外的任何數字),整個數字前面或后面都沒有數字,
這將給出:
['12345663333']
請注意,在第二種情況下,使用 來?:
確保括號內的組是非捕獲組——這確保re.findall
將返回匹配的所有內容,而不是括號的內容。
添加回答
舉報
0/150
提交
取消