我有很长的字符串,如
"123 - Footwear, 5678 - Apparel, Accessories & Luxury Goods, 9876 - Leisure Products"
和
"321 - Apparel & Accessories, 4321 - Apparel & Accessories > Handbags, Wallets & Cases, 187 - Apparel & Accessories > Shoes"
我想根据模式"数字,空格,短划线,空格,一些字符串直到下一个数字,空格,短划线,空格或字符串结尾"来拆分它们.请注意,该字符串可能包含逗号,&符号,">"和其他特殊字符,因此拆分它们将不起作用.我认为Python中有一种方法可以基于正则表达式进行拆分,但是我很难形成.
我对正则表达式有非常介绍性的知识.我可以为数字和字母数字字符串形成一个正则表达式,但我不知道如何指定"在下一个数字开始之前采取一切".
更新:预期输出:
第一种情况:
["123 - Footwear", "5678 - Apparel, Accessories & Luxury Goods", "9876 - Leisure Products"]
第二种情况:
["321 - Apparel & Accessories", "4321 - Apparel & Accessories > Handbags, Wallets & Cases", "187 - Apparel & Accessories > Shoes"]
这是模式,首先有一些数字,所以我们使用[0-9]+后跟字符串和特殊字符& - >,因此我们可以使用[a-zA-Z \-&>]+:
>>> str_ = "123 - Footwear, 5678 - Apparel, Accessories & Luxury Goods, 9876 - Leisure Products"
>>> re.findall(r'(?is)([0-9]+[a-zA-Z \-&>,]+)', str_)
['123 - Footwear, ',
'5678 - Apparel, Accessories & Luxury Goods, ',
'9876 - Leisure Products']
Run Code Online (Sandbox Code Playgroud)
您在OP中提到的另一个字符串
>>> str_ = "321 - Apparel & Accessories, 4321 - Apparel & Accessories > Handbags, Wallets & Cases, 187 - Apparel & Accessories > Shoes"
>>> re.findall(r'(?is)([0-9]+[a-zA-Z \-&>,]+)', str_)
['321 - Apparel & Accessories, ',
'4321 - Apparel & Accessories > Handbags, Wallets & Cases, ',
'187 - Apparel & Accessories > Shoes']
Run Code Online (Sandbox Code Playgroud)
您可以匹配以一位或多位数字开头,后跟 1+ 空格、-、 1+ 空格并以相同模式或字符串末尾结尾的子字符串。
re.findall(r"\d+\s+-\s+.*?(?=\s*(?:,\s*)?\d+\s+-\s|\Z)", s, re.S)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
注意:如果前导数字长度大于 1,例如至少是 2 位数字,您可以将 替换为\d+等\d{2,}。根据您的需要进行调整。
正则表达式演示
\d+- 1+ 位数字\s+-\s+--包含 1 个以上空格.*?- 任何 0+ 个字符,尽可能少,直到字符串中后跟...的位置(?=\s*(?:,\s*)?\d+\s+-\s|\Z)-(积极的前瞻):
\s*(?:,\s*)?\d+\s+-\s- 0+ 个空格、逗号的可选子字符串和其后的 0+ 个空格、1+ 个数字、1+ 个空格-和一个空格| - 或者\Z- 字符串结尾import re
rx = r"\d+\s+-\s+.*?(?=\s*(?:,\s*)?\d+\s+-\s|\Z)"
texts = ["123 - Footwear, 5678 - Apparel, Accessories & Luxury Goods, 9876 - Leisure Products", "321 - Apparel & Accessories, 4321 - Apparel & Accessories > Handbags, Wallets & Cases, 187 - Apparel & Accessories > Shoes"]
for s in texts:
print("--- {} ----".format(s))
print(re.findall(rx, s, re.S))
Run Code Online (Sandbox Code Playgroud)
输出:
--- 123 - Footwear, 5678 - Apparel, Accessories & Luxury Goods, 9876 - Leisure Products ---
['123 - Footwear', '5678 - Apparel, Accessories & Luxury Goods', '9876 - Leisure Products']
--- 321 - Apparel & Accessories, 4321 - Apparel & Accessories > Handbags, Wallets & Cases, 187 - Apparel & Accessories > Shoes ---
['321 - Apparel & Accessories', '4321 - Apparel & Accessories > Handbags, Wallets & Cases', '187 - Apparel & Accessories > Shoes']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
710 次 |
| 最近记录: |