2012-12-14 73 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

相關問題