匹配定界字符之间的字符串

Match strings between delimiting characters

有些字符串与其他文本排成一行,由开始和结束引号分隔,如下所示。我试图找到一个将 word/phrase 与逗号作为内部分隔符匹配的正则表达式(或者如果没有逗号,则整个外部分隔内容,如单个 word/phrase 的情况)。例如,对于这些短语:

‘verdichten’
‘verdichten, verstopfen’
‘dunkel, finster, wolkig’
‘fort sein, verloren sein, verloren’
‘von den Nymph ergriffen, verzückt, verrückt’
‘der sich halten kann, halten kann’

我想要的结果是:

[[verdichten]]
[[verdichten]], [[verstopfen]]
[[dunkel]], [[finster]], [[wolkig]]
[[fort sein]], [[verloren sein]], [[verloren]]
[[von den Nymph ergriffen]], [[verzückt]], [[verrückt]]
[[der sich halten kann]], [[halten kann]]

它应该可以在 Notepad++ 或 EmEditor 中使用。

我可以匹配(‘)(.+?)(’),但我找不到描述的替换方法。

一个选项可能是使用 \G 锚点和 2 个捕获组:

(?:‘|\G(?!^))([^,\r\n’]+)(?=[^\r\n’]*’)(?:(,\h*)|’)

部分

  • (?:非捕获组
    • 匹配
    • |
    • \G(?!^) 在上一场比赛结束时声明位置,而不是在开始时
  • )*关闭非捕获组
  • ( 捕获 组 1
    • [^,\r\n’]+ 匹配任何字符 1+ 次,除了 , 或换行符
  • ) 关闭群组
  • (?=[^\r\n’]*’) 正面前瞻,断言右边的是
  • (?:非捕获组
    • (,\h*)|’组 2 中捕获一个逗号和 0+ 个水平空白字符,或者匹配
  • )关闭非捕获组

Regex demo

在替换使用中:

[[]]

输出

[[verdichten]]
[[verdichten]], [[verstopfen]]
[[dunkel]], [[finster]], [[wolkig]]
[[fort sein]], [[verloren sein]], [[verloren]]
[[von den Nymph ergriffen]], [[verzückt]], [[verrückt]]
[[der sich halten kann]], [[halten kann]]

在@The fourth bird 的回答的帮助下,这里有一个不包含匹配末端的 space 字符的正则表达式:

(?:‘|\s*(?!^))([^,\r\n’]+)(?=[^\r\n’]*’)(?:(,)|’)

替换为 [[]]

将给出修剪后的令牌:

[[verdichten]],[[verstopfen]]
[[dunkel]],[[finster]],[[wolkig]]
[[fort sein]],[[verloren sein]],[[verloren]]
[[von den Nymph ergriffen]],[[verzückt]],[[verrückt]]
[[der sich halten kann]],[[halten kann]]

demo

编辑: 对于您给出的 test context ‘verdichten’ test context 示例,您可以使用:

(?:‘|\G\s*(?!^))([^,\r\n’]+)(?=[^\r\n’]*’)(?:(,)|’)