我有兩列,一列包含一串數字,一列包含兩位或三位數字,如下所示:
Account number
0 5493455646944
1 56998884221
2 95853255555926
3 5055555555495718323
4 56999998247361
5 6506569568
我想創建一個正則運算式函式,如果帳號包含更多 5 個或更多連續重復數字,則顯示一個標志。
所以理論上,目標狀態如下:
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
我在想類似的事情:
def reg_finder(x):
return re.findall('^([0-9])\1{5,}$', x)
我完全不擅長正則運算式,所以不確定......謝謝
編輯:這是我嘗試過的:
def reg_finder(x):
return re.findall('\b(\d)\1 \b', x)
example_df['test'] = example_df['Account number'].apply(reg_finder)
Account number test
0 5493455646944 []
1 56998884221 []
2 95853255555926 []
3 5055555555495718323 []
4 56999998247361 []
5 6506569568 []
uj5u.com熱心網友回復:
您可以使用
import pandas as pd
import warnings
warnings.filterwarnings("ignore", message="This pattern has match groups")
df = pd.DataFrame({'Account number':["5493455646944","56998884221","95853255555926","5055555555495718323","56999998247361","6506569568"]})
df['test'] = "No"
df.loc[df["Account number"].str.contains(r'([0-9])\1{4,}'), 'test'] = "Yes"
輸出:
>>> df
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
請注意,r'([0-9])\1{4,}'正則運算式是使用原始字串文字定義的,其中反斜杠被決議為文字反斜杠,而不是字串轉義序列輔助字符。
uj5u.com熱心網友回復:
正則運算式中的問題re.findall('^([0-9])\1{5,}$', x):
- 你使用
^和$which用來匹配所有的字串是連續的。 - 你想匹配包含更多 5,
\1已經是匹配,你只需要 4 更多。
您可以使用
df['test'] = np.where(df['Account number'].astype(str).str.contains(r'([0-9])\1{4,}'), 'Yes', 'No')
# Or
df['test'] = np.where(df['Account number'].astype(str).str.contains(r'(\d)\1{4,}'), 'Yes', 'No')
print(df)
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/460602.html
上一篇:EDI檔案上的正則運算式
