Regex 正则表达式查找两个单词之间的所有逗号

Regex 正则表达式查找两个单词之间的所有逗号,regex,Regex,我试图清理一个大的.csv文件,该文件包含许多逗号分隔的单词,我需要这些单词来合并部分内容。所以我有一个小节,我想把所有的逗号都改成斜杠。假设我的文件包含以下文本: Foo、bar、spam、鸡蛋、额外、零件、勺子、鸡蛋、sudo、测试、示例、blah、pool 我想选择唯一单词栏和blah之间的所有逗号。这样做的目的是将逗号替换为斜杠(使用find和replace),从而得到以下结果: Foo,bar,spam/eggs/extra/parts/spoon/eggs/sudo/test/exa

我试图清理一个大的.csv文件,该文件包含许多逗号分隔的单词,我需要这些单词来合并部分内容。所以我有一个小节,我想把所有的逗号都改成斜杠。假设我的文件包含以下文本:

Foo、bar、spam、鸡蛋、额外、零件、勺子、鸡蛋、sudo、测试、示例、blah、pool

我想选择唯一单词栏和blah之间的所有逗号。这样做的目的是将逗号替换为斜杠(使用find和replace),从而得到以下结果:

Foo,bar,spam/eggs/extra/parts/spoon/eggs/sudo/test/example,blah,pool

根据@EganWolf输入: 如何在搜索中包括单词,但将其从选择中排除(对于唯一单词),以及如何仅匹配单词之间的逗号

到目前为止,我只选择了唯一单词之间的所有文本,包括:
条,.*,等等
条:*,等等
(条:.+?,等等)*,*\2


我尝试了消极前瞻,但无法从我的语句中获得任何搜索结果。

以下正则表达式将捕获访问所需逗号所需的最少文本:

(?<=bar,)(.*?(,))*(?=.*?,blah)

这可以很容易地变成一个函数,将整行和关键字作为输入。

使用Notepad++,您可以执行以下操作:

  • Ctrl+H
  • 查找内容:
    (?:\bbar,|\G(?!^))\K([^,]*),(?=。+\bblah\b)
  • 替换为:
    $1/
  • 检查环绕
  • 检查正则表达式
  • 取消选中
    。匹配换行符
  • 全部替换
说明:

(?:             # start non capture group
    \bbar,      # word boundary then bar then a comma
  |             # OR
    \G          # restart from last match position
    (?!^)       # negative lookahead, make sure not followed by beginning of line
)               # end group
\K              # forget all we've seen until this position
([^,]*)         # group 1, 0 or more non comma
,               # a comma
(?=             # positive lookahead
    .+          # 1 or more any character but newlie
    \bblah\b    # word boundary, blah, word boundary
)               # end lookahead
Foo,bar,spam/eggs/extra/parts/spoon/eggs/sudo/test/example,blah,pool
给定示例的结果:

(?:             # start non capture group
    \bbar,      # word boundary then bar then a comma
  |             # OR
    \G          # restart from last match position
    (?!^)       # negative lookahead, make sure not followed by beginning of line
)               # end group
\K              # forget all we've seen until this position
([^,]*)         # group 1, 0 or more non comma
,               # a comma
(?=             # positive lookahead
    .+          # 1 or more any character but newlie
    \bblah\b    # word boundary, blah, word boundary
)               # end lookahead
Foo,bar,spam/eggs/extra/parts/spoon/eggs/sudo/test/example,blah,pool
屏幕截图:

(?:             # start non capture group
    \bbar,      # word boundary then bar then a comma
  |             # OR
    \G          # restart from last match position
    (?!^)       # negative lookahead, make sure not followed by beginning of line
)               # end group
\K              # forget all we've seen until this position
([^,]*)         # group 1, 0 or more non comma
,               # a comma
(?=             # positive lookahead
    .+          # 1 or more any character but newlie
    \bblah\b    # word boundary, blah, word boundary
)               # end lookahead
Foo,bar,spam/eggs/extra/parts/spoon/eggs/sudo/test/example,blah,pool

你尝试了什么?问题出在哪里?@EganWolf我查看了无数的备忘单和正则表达式生成器,我没有在这里发布正则表达式,因为它们都是像\b、\b或bar、.*之类的通用规则。。。不是很有帮助。如何排除正在搜索的关键字?是否可以使用所有逗号的拆分操作,然后将目标元素与/?这是在什么操作系统上发生的?Linux:Ubuntu18.04 LTSGreat回答并感谢您。我将另一个标记为正确的,因为通过文本编辑器这样做更通用+1工作起来很有魅力。谢谢你的详细解释。