[英]Split a string by comma except when in bracket and except when directly before and/or after the comma is a dash "-"?
只是想弄清楚如何用逗号分隔字符串,除非在括号中,除非在逗号之前和/或之后是破折号。 对于如何处理括号问题,我已经找到了一些很好的解决方案,但我不知道如何将其扩展到我的问题。
这是一个例子:
example_string = 'A-la-carte-Küche, Garnieren (Speisen, Getränke), Kosten-, Leistungsrechnung, Berufsausbildung, -fortbildung'
aim = ['A-la-carte-Küche', 'Garnieren (Speisen, Getränke)', 'Kosten-, Leistungsrechnung', 'Berufsausbildung, -fortbildung']
到目前为止,我已经设法做到了以下几点:
>>> re.split(r',\s*(?![^()]*\))', example_string)
>>> out: ['A-la-carte-Küche', 'Garnieren (Speisen, Getränke)', 'Kosten-', 'Leistungsrechnung', 'Berufsausbildung', '-fortbildung']
请注意术语“Kosten-, Leistungsrechnung”和“Berufsausbildung, -fortbildung”的目标和出局之间的区别。 如果有人可以帮助我,使 output 看起来像目标,我会很高兴。
提前致谢!
亚历克斯
如果你可以使用 python regex module ,你可以这样做:
\([^()]*\)(*SKIP)(*F)|(?<!-)\s*,\s*(?!,)
模式匹配:
\([^()]*\)
从左括号到右括号匹配(*SKIP)(*F)
跳过比赛|
或者(?<,-)\s*?\s*(,!,)
匹配要拆分的可选空白字符之间的逗号import regex
example_string = 'A-la-carte-Küche, Garnieren (Speisen, Getränke), Kosten-, Leistungsrechnung, Berufsausbildung, -fortbildung'
print(regex.split(r"\([^()]*\)(*SKIP)(*F)|(?<!-)\s*,\s*(?!,)", example_string))
Output
['A-la-carte-Küche', ' Garnieren (Speisen, Getränke)', ' Kosten-, Leistungsrechnung', ' Berufsausbildung', ' -fortbildung']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.