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

时间:2019-09-24 15:55:12

标签: regex notepad++ emeditor

有些字符串与其他文本一起出现在一行中,这些字符串由开/闭引号分隔,如下所示。我试图找到一个正则表达式,将单词/短语与逗号匹配作为内部定界符(或整个外部定界的内容,如果在单个单词/短语的情况下没有逗号,则为整体)。例如,以下短语:

‘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中工作。

我可以与(‘)(.+?)(’)搭配,但是找不到如上所述的替换方法。

2 个答案:

答案 0 :(得分:3)

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

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

部分

  • (?:非捕获组
    • 匹配
    • |
    • \G(?!^)在上一场比赛的末尾而不是在开始时断言
  • )*关闭非捕获组
  • (捕获第1组
    • [^,\r\n’]+匹配除,或换行符以外的任意字符1倍以上
  • )关闭群组
  • (?=[^\r\n’]*’)正向前进,断言右边是
  • (?:非捕获组
    • (,\h*)|’第二组中捕获逗号和0+个水平空白字符,或者匹配
  • )关闭非捕获组

Regex demo

在替换使用中:

[[$1]]$2

输出

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

答案 1 :(得分:1)

借助@第四只小鸟的答案,这是一个正则表达式,该正则表达式将不包括比赛末端的空格字符:

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

替换为 [[$1]]$2

将给出经过修剪的令牌:

[[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’]*’)(?:(,)|’)