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