簡體   English   中英

在python中使用正則表達式從字符串中提取多個連續的兩個字母

[英]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)(?:;|$)

正則表達式演示 2

並將其簡化為:

\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])(?:;|$)

正則表達式演示 3

在您期望的兩個字符之后有一個空格,在您期望的兩個字符之前是 ';' 或行尾

將英文描述翻譯成正則表達式直接產生

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM