簡體   English   中英

用逗號拆分字符串,除非在括號中,除非在逗號之前和/或之后直接是破折號“-”?

[英]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']

您可以使用

re.split(r'(?<!-),(?!\s*-)\s*(?![^()]*\))', example_string)

請參閱Python 演示 詳情

  • (?<!-) - 如果當前位置的左側緊鄰有一個-字符,則匹配失敗的否定后視
  • , - 一個逗號
  • (?!\s*-) - 如果當前位置的右側立即有一個-字符,則匹配失敗的否定前瞻
  • \s* - 零個或多個空格
  • (?![^()]*\)) - 如果除了)(然后是)字符之外還有零個或多個字符,則匹配失敗的否定前瞻性緊接在當前位置的右側。

也請參閱正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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