正则表达式替换一个单词的一些实例而不是其他单词的实例

时间:2013-02-21 19:03:57

标签: ruby regex

我试图找出一个正则表达式,将一些字符串中包含的单词从“Name1”替换为“N1”,在RUBY中:

Name1_Instance_1 --> N1_Instance_1
Name1_Instance_2 --> N1_Instance_2

但如果字符串末尾包含.xml,则不是这样:

Name1.xml
Name1_Instance.xml

我试过这个:

Name1[\w_]*[^.xml]

但它不排除这种情况

Name1_Instance.xml

3 个答案:

答案 0 :(得分:2)

尝试以下几点:

Name(?=\d+)(?!\w*\.xml)

这里我使用了一个前瞻断言((?=\d+))来查看一个或多个数字是否跟随Name,然后我使用了一个负前瞻断言((?!\w*\.xml))来排除任何以{{结尾的项目1}}。任何变种的前瞻断言都不会消耗任何字符串,也不会在结果中返回前瞻断言的任何部分。

在Ruby中,你可以这样做:

.xml

答案 1 :(得分:1)

你可以试试这个:

Name1\w*(?!\.xml)

?!negative lookahead

答案 2 :(得分:1)

你可以使用看起来像的负向前瞻:

Name1[\w]*(?!\.xml)