例如,輸入字串是Hi a14457h11 what is up?
我只想a14457h11從句子中提取。
輸入也可以是Hi a14457h11 what is up? I am b14457h12 good. That is a14457h11 great
這里提取的輸出將是:a14457h11和b14457h12(重復第三個)。
它將始終采用相同的格式:1 個字母后跟 5 個數字,然后是 1 個字母和另外 2 個數字(以相同的順序)。
我可以在原始 python 中做到這一點,但有沒有辦法在正則運算式中做到這一點?
uj5u.com熱心網友回復:
您可以使用此模式:[a-z][0-9]{5}[a-z][0-9]{2}
import re
s = """"Hi a14457h11 what is up? I am b14457h12 good. That is b14457h12 great"""
regex = re.compile(r'[a-z][0-9]{5}[a-z][0-9]{2}')
l = regex.findall(s)
print(l)
# ['a14457h11', 'b14457h12', 'b14457h12']
如果輸入中的字母區分大小寫,則必須[a-z]相應地更改 char classes()。
解釋:
[a-z] matches one lower case letter
[0-9]{5} matches five numbers
[a-z] matches one lower case letter
[0-9]{2} matches two numbers
在這里測驗:https ://regex101.com/r/XHzITt/1
uj5u.com熱心網友回復:
import re
s = "Hi a14457h11 what is up? I am b14457h12 good. That is b14457h12 great"
regex = re.compile(r'[a-z]\d{5}[a-z]\d\d')
f = set(regex.findall(s))
print(f)
# {'b14457h12', 'a14457h11'}
uj5u.com熱心網友回復:
想法是,它將始終采用相同的格式:1 個字母后跟 5 個數字,然后是 1 個字母和 2 個數字(以相同的順序)
因為它總是遵循相同的順序。我們可以根據以下規則設定我們的正則運算式。
r"(\w\d{5}\w\d{2})"
解釋
- \w 匹配任何單詞字符組
- \d 匹配一個數字(相當于 [0-9])
- {5} 與前一個標記完全匹配 5 次
- \w 匹配任何單詞字符組
- \d 匹配一個數字(相當于 [0-9])
- {2} 與前一個標記完全匹配 2 次
參考:正則運算式101
Edit1:正如@a??notherGatsby 指出的那樣,因為\wmatches [a-zA-Z0-9_],我們也可以使用[abc]whichmatches a single character in the list abc (case sensitive)作為替代方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458785.html
標籤:python-3.x 正则表达式 细绳 子串
上一篇:浮點、范圍和零的正則運算式
