2
A
回答
4
我會用積極的向前看符號爲每個單詞,像這樣的(你可以根據需要添加儘可能多的):
(?=.*?\bsun\b)(?=.*?\bshining\b).*
1
您將需要使用正則表達式,認爲這樣的每種排列:
\b(sun\b.+\bshining|shining\b.+\bsun)\b
這裏所說的邊界\b
用於僅匹配字sun
和shining
,並沒有像「晴天」這樣的子詞。
2
基本正則表達式不能很好地處理不同的單詞順序。有辦法做到這一點,但正則表達式變得醜陋,除了正則表達式大師之外對所有人都是難以理解的。我更喜歡在大多數情況下選擇自己的可讀性。
我的建議是使用一個簡單的or
變種,是這樣的:
sun.+shining|shining.+sun
與字邊界如果需要的話:
\bsun\b.+\bshining\b|\bshining\b.+\bsun\b
由於盧塞羅指出,這將變得笨拙隨着你搜索的單詞數量增加,在這種情況下,我會選擇多個正則表達式匹配解決方案:
def hasAllWords (string, words[]):
count = words[].length()
for each word in words[]:
if not string.match ("\b" + word + "\b"):
return false
return true
該僞代碼將對每個單詞執行檢查並確保它們全部出現。
+0
就像Gumbo的解決方案一樣,這會讓更多的單詞變得醜陋,並且由於貪婪的量詞而表現不佳。 – Lucero 2010-10-23 13:56:27
0
你使用兩個正則表達式。
if (($line =~ /\bsun\b.+\bshining\b/) ||
($line =~ /\bshining\b.+\bsun\b/)) {
# do whatever
}
有時你必須做什麼似乎是低科技。這個問題的其他答案會讓你用交替和前瞻等構建複雜的正則表達式,但有時候最好的方法是以最簡單的方式來完成,在這種情況下,就是使用兩種不同的正則表達式。
不用擔心執行速度。除非您將此解決方案與其他更復雜的單表達式解決方案進行對比,否則您不知道哪個更快。編寫緩慢的正則表達式非常容易。
相關問題
- 1. 查找單詞的正則表達式
- 2. 正則表達式來查找以冒號開頭的單詞
- 3. JavaScript的正則表達式來查找單詞串
- 4. 正則表達式查找單詞希伯來文
- 5. 正則表達式按順序查找單詞但是換句話說
- 6. 正則表達式尋找單詞
- 7. 正則表達式來匹配單詞
- 8. 正則表達式來利用單詞
- 9. 正則表達式查詢的順序
- 10. 正則表達式來查找你知道字母但不是字母的字母順序的單詞嗎?
- 11. Python正則表達式查找單詞與其他詞分開
- 12. 查找所有單詞,而不使用正則表達式
- 13. 正則表達式來查找公式
- 14. 正則表達式順序
- 15. 不含正則表達式的單詞
- 16. 是否有可能使用正則表達式來查找單詞序列?
- 17. Javascript正則表達式 - 包含任意順序的單詞和單詞
- 18. 正則表達式來查找以「&」開頭的詞,並且以&
- 19. 正則表達式來查找包圍方括號的單個單詞
- 20. bash的正則表達式查找線,重複的單詞
- 21. Python的正則表達式查找單詞的文字
- 22. 正則表達式在php中查找word中的單詞
- 23. 用php正則表達式查找包含單詞的整行
- 24. Python的正則表達式查找單詞
- 25. PHP的正則表達式查找單詞串
- 26. 查找括號內的單詞 - 正則表達式+ Ruby
- 27. 查找嚴格以$開頭的單詞,正則表達式C#
- 28. 使用正則表達式來查找
- 29. 正則表達式來查找郵編?
- 30. 正則表達式 - 不介意順序?
哪種語言? – kennytm 2010-10-23 13:44:51