Python,RegEx,替换匹配的某个部分

pyt*_*432 3 python regex

我正在尝试替换正则表达式找到的匹配项的某个部分。相关字符串具有以下格式:

"<Random text>[Text1;Text2;....;TextN]<Random text>"
Run Code Online (Sandbox Code Playgroud)

所以基本上可以有 N 个用“;”分隔的文本 括号内。我的目标是改变“;” 变成“,”(但仅适用于这种格式的字符串),以便我可以保留“;” 作为 CSV 文件的分隔符。所以结果应该是:

"<Random text>[Text1,Text2,...,TextN]<Random text>"
Run Code Online (Sandbox Code Playgroud)

我可以用类似的东西匹配相关的字符串

re.compile(r'\[".*?((;).*?){1,4}"\]')
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试使用 sub 方法,它会替换整个字符串。

我已经搜索过 stackoverflow,我很确定“捕获组”可能是解决方案,但我并没有真正到达那里。谁能帮我?

我只想改变“;” 在我的文本文件的 ["Text1;...;TextN"] 部分。

Pot*_*toツ 6

试试这个正则表达式:

;(?=(?:(?!\[).)*])
Run Code Online (Sandbox Code Playgroud)

用一个替换每个匹配 ,

点击演示

解释:

  • ; - 匹配一个 ;
  • (?=(?:(?!\[).)*])- 确保上面;的后面紧跟]在字符串后面的某个地方但在任何左括号之前[
    • (?=....) - 积极的前瞻
    • (?:(?!\[).)* - 0+ 出现任何不以开头的字符 [
    • ] - 匹配一个 ]