1

Pythonで次の行を一致させようとしていますが、この行が機能していません。

テキストの例は次のとおりです。

usr/local/java/latest/bin/java-Djava.util.logging.config.file=/usr/local/tomcat/foobarcode/conf/

Pythonの例:

re.match(r"/usr/local/java/latest/bin/java[-]Djava[.]util[.]logging[.]config[.]file[=]/usr/local/tomcat/(\.*)/conf/\.*", pidInfo)

提供できるどんな助けでも大いに感謝されるでしょう。ありがとう!

4

2 に答える 2

1

これがあなたがやろうとしていることの修正版です:

>>> s = '/usr/local/java/latest/bin/java-Djava.util.logging.config.file=/usr/local/tomcat/foobarcode/conf/'
>>> re.match(r'/usr/local/java/latest/bin/java-Djava\.util\.logging\.config\.file=/usr/local/tomcat/(.*)/conf/.*', s)
<_sre.SRE_Match object at 0x1004a0648>

問題:

  1. .ワイルドカードとしてエスケープする必要はありません
  2. \.ファイル名のドットとして使用する場合は、(エレガントに)エスケープする必要があります([.]正常に機能しますが、IMOのエレガントさは劣ります)
  3. /ファイル名にルートがありません
  4. -=文字はエスケープする必要はありません
于 2012-12-14T22:08:48.343 に答える
1

問題は、 をエスケープすることです.。それは文字通りのピリオドになります。ワイルドカードになるように、エスケープせずに残しておきます。

re.match(r"/usr/local/java/latest/bin/java-Djava[.]util[.]logging[.]config[.]file=/usr/local/tomcat/(.*)/conf/.*", pidInfo)

また、入力例には先頭/の が含まれていませんが、これはコピーと貼り付けの間違いである可能性があります。=(そして、 andをエスケープする必要がないことに注意してください-)。

于 2012-12-14T22:05:22.417 に答える