python正则表达式破折号

时间:2012-12-14 22:02:37

标签: python regex

我正在尝试匹配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)

我们将非常感谢您提供的任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

问题是你逃脱了.。这使它成为一个字面时期。你想让它不转义,以便它成为通配符:

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

此外,您的输入示例不包含前导/,但这可能是复制粘贴错误。 (请注意,无需转义=-)。

答案 1 :(得分: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. 中缺少根/
  5. -=字符不需要转义