2012-12-14 72 views
1

我想在python中匹配下面这行,但是这行不起作用。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) 

,可以提供将不胜感激任何帮助。谢谢!

+0

'\ *'将匹配文字上的'.' 0次或更多次。 –

+0

@Ashwini Chaudhary,你的编辑打破了Python的语法。如果长行对您来说是个问题,请使用'\'行连续字符,但不要破坏语法。 –

+0

@YuvalAdam我不好,谢谢你的修复。 –

回答

1

问题是你逃过.。这使它成为一个文字时期。你想离开它转义,使其成为通配符:

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

而且,你的输入示例不包含领先/,但可能是一个复制粘贴错误。 (并且注意不需要转义=-)。

+0

D0h - 问题是它出现在你指的区域外的屏幕上! –

+0

@JonClements我更喜欢滚动条的问题如何呈现的随机换行符;) –

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. 你确实需要(优雅地)逃避\.作为文件名中的点([.]工作得很好,只是不那么优雅的国际海事组织)
  3. 缺少根/在文件名
  4. -=字符不需要转义
+0

我的版本,我喜欢它更好,但是'[。]'也适用:) –

+0

是的,但你说它就像**是**的方式,尽管它只是一个品味问题。在许多情况下,我发现字符类逃生技术更具可读性。 –

+0

我尝试运行您创建的正则表达式,除非将“ - ”更改为“。+”,否则它仍然不匹配。除此之外,它看起来完美无缺。 – user1905277

相关问题