搜索并替换lookarounds正则表达式

时间:2014-08-06 20:22:11

标签: regex perl regex-lookarounds

假设我有多个包含';'的字符串。只有当字符串中包含逗号时,我才想摆脱&#39 ;;'如果没有逗号,我想留下半冒号,&#39 ;;'。

我想摆脱半结肠的一个例子,&#39 ;;':

1,JoE,Stuff,more stuff; 05423089; 3029483-;98

输出:

1,JoE,Stuff,more stuff 05423089 3029483-98

我将处理数十万行数据。

基本上我在这里做的是用逗号分隔文件的地方,我想省略所有的分号,&#39 ;;'。我知道你可以用正则表达式环顾四周但我不确定如何搜索和替换它们。

如果没有逗号或不是逗号分隔文件,我想保留所有分号。我可能有一些由&#39 ;;'或分号分隔的文件。

示例:

1; JoE;东西;更多东西; 054230893029483-98

在上面的示例中,我不想删除';'。

这是我到目前为止所做的:

s/((?=;)^.*?,.*?$)/$1/gi;

(?=;)检查由(^。?,。?)封装的分号,这是我想要匹配的字符串。我不相信我打电话给我的1美元'和' $ 2'正确。

使用lookarounds进行搜索和替换的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

因此,如果它包含逗号,你基本上想要删除一行中的所有分号。

使用以下perl one-liner

可以轻松完成
perl -i -pe 's/;//g if /,/' file.txt

说明:

切换

  • -i[extension]:编辑<>个文件(如果提供了扩展程序,则进行备份)
  • -p:为输入文件中的每个“行”创建一个while(<>){...; print}循环。
  • -e:告诉perl在命令行上执行代码。

<强>代码

  • s/;//g:从行中删除所有分号
  • if /,/:仅当该行包含逗号