0

我试图找出一个正则表达式来替换一些字符串中包含的单词,从“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

4

3 回答 3

2

尝试以下方式:

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

在这里(?=\d+),我使用了前瞻(?!\w*\.xml)断言.xml(任何种类的前瞻断言都不会消耗任何字符串,并且不会在结果中返回前瞻断言的任何部分。

在 Ruby 中,您可以这样做:

t = """Name1_Instance_1    
.. .. .. .. Name1_Instance_2    
.. .. .. .. Name1.xml    
.. .. .. .. Name1_Instance.xml""".gsub /Name(?=\d+)(?!\w*\.xml)/, 'N'

print t
N1_Instance_1   
.. .. .. N1_Instance_2   
.. .. .. Name1.xml   
.. .. .. Name1_Instance.xml
于 2013-02-21T19:16:31.553 回答
1

你可以试试这个:

Name1\w*(?!\.xml)

?!负前瞻

于 2013-02-21T19:15:58.213 回答
1

您可以使用如下所示的负前瞻:

Name1[\w]*(?!\.xml)
于 2013-02-21T19:16:13.387 回答