[英]extract multiple two consecutive letters from a string using regex in python
我有一些包含一些美國州縮寫的字符串。 我想提取所有這些。 例如:
s='United States WA;United States;Mexico;United States OR;United States PA'
我想要的輸出:
'WA;OR;PA'
我也希望解決方案是靈活的。 存在的州縮寫數量各不相同。 例如,字符串可以是
s='United States WA;United States PA'
我希望輸出是:
'WA;PA'
您可以使用re.findall
:
import re
s='United States WA;United States;Mexico;United States OR;United States PA'
new_s = re.findall('(?<=\s)\w{2}(?=;)|(?<=\s)\w{2}(?=$)', s)
輸出:
['WA', 'OR', 'PA']
我猜,
\b[A-Z]{2}(?:;|$)
可能只是涵蓋了這一點。
import re
s = '''United States WA;United States;Mexico;United States OR;United States PA'''
out = ''
for i in re.findall(r'\b[A-Z]{2}(?:;|$)', s):
out += i
print(out)
WA;OR;PA
如果你想簡化/更新/探索表達式,它已在regex101.com 的右上角面板中進行了解釋。 如果您有興趣,可以在此調試器鏈接中觀看匹配步驟或修改它們。 調試器演示了 RegEx 引擎如何逐步使用一些示例輸入字符串並執行匹配過程。
jex.im可視化正則表達式:
我們還可以使用交替將這 50 個狀態寫入非捕獲組,例如:
\b(?:AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)(?:;|$)
並將其簡化為:
\b(?:A[LKZR]|C[AOT]|D[EC]|FL|GA|HI|I[DLNA]|K[SY]|LA|M[EDAINSOT]|N[EVHJMYCD]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|VT|VA|W[AVIY])(?:;|$)
在您期望的兩個字符之后有一個空格,在您期望的兩個字符之前是 ';' 或行尾
將英文描述翻譯成正則表達式直接產生
pat = '(?<=\s)\w{2}(?=;|$)'
re.findall(pat, s)
# gives me
['WA', 'OR', 'PA']
然后用';'加入它們得到想要的結果:
';'.join(re.findall(pat, s))
# outputs:
'WA;OR;PA'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.