在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
所以, - 在最后一个字之后以及要保持的数字之间。 只有被替换的单词之间的那些。
答案 0 :(得分:1)
使用环顾四周:
(?i)(?<=[a-z])-(?=[a-z])
这匹配前面有一个字母和后面跟一个字母的短划线。
答案 1 :(得分:1)
如果我没有遗漏任何正则表达式应该适合你:
(?<=\D)-(?=\D)
它只是意味着如果它在两个非数字字符之间,则找到一个连字符。
答案 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
表示它是全局替换,因此解释器不应该在第一次匹配后停止发现。