正则表达式:如何在单词之间找到破折号

时间:2013-06-02 07:04:03

标签: regex pcre

在PCRE中如何找到单词之间的短划线

e.g。

  

首先-文件111-222.txt
  此结果最第二文件123-456.txt
  并且最后一个-66-77.txt

所以,First和File之间的破折号(等)

然后我可以用空格替换它们。

使用([^a-zA-Z]\d(.+))我可以选择最后一部分(破折号+ nbrs),但我不知道如何标记其他破折号。

== 编辑 我们的想法是使用重命名工具(支持正则表达式) - 然后重命名将导致

第一个文件-111-222.txt
这是第二个文件-123-456.txt
最后一个-66-77.txt

所以, - 在最后一个字之后以及要保持的数字之间。 只有被替换的单词之间的那些。

4 个答案:

答案 0 :(得分:1)

使用环顾四周:

(?i)(?<=[a-z])-(?=[a-z])

这匹配前面有一个字母和后面跟一个字母的短划线。

答案 1 :(得分:1)

如果我没有遗漏任何正则表达式应该适合你:

(?<=\D)-(?=\D)

它只是意味着如果它在两个非数字字符之间,则找到一个连字符。

现场演示:http://www.rubular.com/r/O2XUNaB02R

答案 2 :(得分:0)

您需要启用全局模式,该模式将查找并替换匹配文本中的每个匹配项。以下是一个示例:http://www.regex101.com/r/hG5rX8(请注意选项中的g)。

正如实际的正则表达式那样,\w-\w之类的简单内容应该足以获得破折号。

答案 3 :(得分:0)

这只是你想要工作的破折号吗?如果是这样,假设您在名为foo

的文件中输入了输入,则下面的代码应该可以解决问题
perl -pe "s/-/ /g" < foo

这将给出这个输出:

First file 111 222.txt
This is the second file 123 456.txt
And the last one 66 77.txt

前面的s标记正则表达式用于替换,而尾随g表示它是全局替换,因此解释器不应该在第一次匹配后停止发现。