我有如下字串:
1338516 -...pair - 5pk 1409093 -...re Wax 3Pk
1409085 -...dtnr - 5pk 1415090 -...accessories
490663 - 3 pack 1490739 -...2 - 3 pack
我想要做的是,拆分這些字串,使第一個字串是1338516 -...pair - 5pk,第二個是1409093 -...re Wax 3Pk.
目前,我可以使用以下代碼提取數字:
list(filter(lambda k: '...' in k, reqText))
lst1 = ''.join(lst)
numbers = re.findall(r'\d ', lst1)
numbers1 = [x for x in numbers if len(x) > 3]
有什么建議么?
uj5u.com熱心網友回復:
您可以將 split 與模式一起使用:
[^\S\n] (?=\d{5,7}\b)
解釋
[^\S\n]匹配 1 個或多個不帶換行符的空格(?=\d{5,7}\b)正向前瞻,向右斷言 5-7 位數字,后跟單詞邊界
正則運算式演示
import re
pattern = r"[^\S\n] (?=\d{5,7}\b)"
lst = [
"1338516 -...pair - 5pk 1409093 -...re Wax 3Pk",
"1409085 -...dtnr - 5pk 1415090 -...accessories",
"490663 - 3 pack 1490739 -...2 - 3 pack"
]
for s in lst:
print(re.split(pattern, s))
輸出
['1338516 -...pair - 5pk', '1409093 -...re Wax 3Pk']
['1409085 -...dtnr - 5pk', '1415090 -...accessories']
['490663 - 3 pack', '1490739 -...2 - 3 pack']
另一種選擇可能是匹配方法:
\b\d{5,7}\b.*?(?=[^\S\n] \d{5,7}\b|$)
正則運算式演示
uj5u.com熱心網友回復:
您可以使用
^(. ?)\s*\b(\d{5,7}\b.*)
請參閱正則運算式演示。
在 Python 中,使用原始字串文字來宣告此正則運算式:
pattern = r'^(. ?)\s*\b(\d{5,7}\b.*)'
詳情:
^- 字串的開始(. ?)- 第 1 組:出現一個或多個(但盡可能少)除換行符以外的任何字符\s*- 零個或多個空格\b- 單詞邊界(\d{5,7}\b.*)- 第 2 組:五七位數字、字邊界和行的其余部分。
查看Python 演示:
import re
text = "1338516 -...pair - 5pk 1409093 -...re Wax 3Pk"
pattern = r'^(. ?)\s*\b(\d{5,7}\b.*)'
m = re.search(pattern, text)
if m:
print(m.group(1)) # => 1338516 -...pair - 5pk
print(m.group(2)) # => 1409093 -...re Wax 3Pk
如果您需要在 Pandas 資料框中使用它,可以使用
df[['result_col_1', 'result_col_2']] = df['source'].str.extract(pattern, expand=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/467620.html
上一篇:計算句子中的詞頻
