2

在 PCRE 中如何找到单词之间的破折号

例如

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

因此,First 和 File (等)之间的破折号

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

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

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

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

因此, - 在最后一个单词之后和要保留的数字之间。只替换单词之间的那些。

4

4 回答 4

1

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

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

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

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

于 2013-06-02T14:27:07.510 回答
1

使用环视:

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

这匹配前面有一个字母和后面有一个字母的破折号。

于 2013-06-02T10:41:20.830 回答
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表示它是全局替换,因此解释器不应在找到第一个匹配项后停止。

于 2013-06-02T07:45:28.220 回答
0

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

正如实际的正则表达式一样,简单的东西\w-\w应该足以获得破折号。

于 2013-06-02T07:10:01.630 回答