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+)) を使用して、Name の後に 1 つ以上の数字が続くかどうかを確認し、次に、負の先読みアサーション ( (?!\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 に答える