1

我正在尝试在 python 中匹配以下行,但是该行不起作用。

示例文本是:

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/\.*", 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 回答