2017-04-13 383 views
0

想找到以下樣式中的字符串:正則表達式匹配字符串

word-word-word++-word-word-word++

因此,它可以迭代-wordword-模式,直到字符串的結束。

該字符串非常大,並且包含許多帶有^模式的單詞。 已嘗試以下方法:

p = re.compile('(?:\w+\-)*\w+\s+=', re.IGNORECASE) 
result = p.match(data) 

但它返回NONE。有人知道答案嗎?

+0

嘗試'p.findall(數據)' –

+0

另外,儘量在前面加上'模式 - '?注意你的問題不清楚。請添加示例輸入和預期輸出 - 您當前的正則表達式與您的描述不符。 –

+0

爲什麼你最後有'='? – vks

回答

1

您的正則表達式只會匹配第一個模式,匹配()只會查找一個匹配項,並且只有緊跟着一些空白和等號。

而且,在你的榜樣,你暗示你想要三個或者更多的話,那麼下面是在以下幾個方面有所變化的一個版本:

  1. 同時匹配模式(注意是領先-?
  2. 比賽只如果至少有三個詞的模式(的{2,}代替+
  3. 即使沒有什麼模式匹配後(在\b一個單詞邊界匹配。這是不是真的有必要在這裏,因爲前面的\w+瓜拉無論如何,我們都在字邊界)
  4. 返回所有匹配,而不是隻返回第一個匹配。

下面的代碼:

#!/usr/bin/python 

import re 

data=r"foo-bar-baz not-this -this-neither nope double-dash--so-nope -yeah-this-even-at-end-of-string" 
p = re.compile(r'-?(?:\w+-){2,}\w+\b', re.IGNORECASE) 
print p.findall(data) 
# prints ['foo-bar-baz', '-yeah-this-even-at-end-of-string'] 
+0

這工作,返回了很多結果。謝謝 – ndm