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

时间:2019-03-08 21:24:34

标签: regex

我试图清理一个很大的.csv文件,其中包含许多逗号分隔的单词,需要合并其中的一部分。所以我有一个小节,我想将所有逗号都改为斜杠。可以说我的文件包含以下文本:

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

我想选择唯一的单词bar和blah之间的所有逗号。这个想法是然后用斜杠替换逗号(使用查找和替换),这样我得到以下结果:

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

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

到目前为止,我只设法选择了包括它们在内的唯一词之间的所有文本: bar,.*,blahbar:*, *,blah(bar:.+?,blah)*,*\2

我尝试过否定的前瞻性,但无法从语句中获得任何搜索结果。

2 个答案:

答案 0 :(得分:2)

使用记事本++,您可以执行以下操作:

  • Ctrl + H
  • 查找内容:(?:\bbar,|\G(?!^))\K([^,]*),(?=.+\bblah\b)
  • 替换为:$1/
  • 检查环绕
  • 检查正则表达式
  • 取消检查. matches newline
  • 全部替换

说明:

(?:             # 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

屏幕截图:

enter image description here

答案 1 :(得分:1)

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

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

请参见Regex Demo

如果要替换逗号,则需要替换捕获组2中的所有内容。捕获组0具有整个匹配项。

另一种方法是用逗号分隔字符串以创建单词数组。然后使用/在bar和blah之间连接单词,并附加,连接的其他单词。

以下是PowerShell拆分和联接的示例:

$a = "Foo,bar,spam,eggs,extra,parts,spoon,eggs,sudo,test,example,blah,pool"
$split = $a -split ","
$slashBegin = $split.indexof("bar")+1
$commaEnd = $split.indexof("blah")-1
$str1 = $split[0..($slashbegin-1)] -join "," 
$str2 = $split[($slashbegin)..$commaend] -join "/"
$str3 = $split[($commaend+1)..$split.count] -join ","
@($str1,$str2,$str3) -join ","

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

可以很容易地将其变成一个功能,以整个行和关键字作为输入。