我试图找出一个正则表达式来替换一些字符串中包含的单词,从“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
尝试以下方式:
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
您可以使用如下所示的负前瞻:
Name1[\w]*(?!\.xml)