匹配定界字符之间的字符串
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+ 个水平空白字符,或者匹配 ’
)
关闭非捕获组
在替换使用中:
[[]]
输出
[[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]]
编辑:
对于您给出的 test context ‘verdichten’ test context
示例,您可以使用:
(?:‘|\G\s*(?!^))([^,\r\n’]+)(?=[^\r\n’]*’)(?:(,)|’)
有些字符串与其他文本排成一行,由开始和结束引号分隔,如下所示。我试图找到一个将 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+ 个水平空白字符,或者匹配’
)
关闭非捕获组
在替换使用中:
[[]]
输出
[[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]]
编辑:
对于您给出的 test context ‘verdichten’ test context
示例,您可以使用:
(?:‘|\G\s*(?!^))([^,\r\n’]+)(?=[^\r\n’]*’)(?:(,)|’)