1

有些字符串与其他文本一起出现在一行中,这些文本由左引号和右引号分隔,如下所示。我正在尝试找到一个正则表达式,它可以将带有逗号的单词/短语匹配为内部分隔符(或者如果没有逗号,例如单个单词/短语,则将整个外部分隔的内容)。例如对于这些短语:

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

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

4

2 回答 2

3
于 2019-09-24T16:07:42.663 回答
1

With the help of @The fourth bird's answer, here's a the regex that will not include the space characters at the extremities of the matches:

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

Replacing with [[$1]]$2

will give the trimmed tokens:

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

Edit: For the test context ‘verdichten’ test context example you gave, you can use:

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

于 2019-09-24T16:28:54.507 回答