2015-10-20 136 views
1

我有以下場景,其中有一組短語,一些是幾個單詞,一些是單詞,我想匹配所有這些短語但我目前的做法我最終匹配單個單詞正則表達式 - 匹配兩個單詞或一個單詞,但優先考慮兩個單詞

例如:

事情我可以匹配:

  • 晴天
  • 陽光谷

正則表達式:(sunny()day|sunny()valley|day)

一句話:今天是一個陽光燦爛的日子

在這裏,我希望「陽光燦爛的日子」然而相匹配,我正則表達式始終以「天」相匹配,有可能是其他句子,只包含我想要匹配的一天。

有誰知道如何設計一個正則表達式來完成這個任務?

+0

您有空間捕獲組。這是故意的嗎? –

+0

@emartinelli不是故意的,我只是想在那裏指定一個空間而沒有得到混合的結果,也許有更好的方法來做到這一點? – perrohunter

+0

您可以使用'\ s'來表示空格。但即使使用「真實空間」,也不需要括號,因爲在這種情況下,它只會生成其他匹配。例如:使用@stribizhev答案和您的輸入,'晴天'和空間將匹配。爲了不符合這個額外的空間,請使用'\ b(sunny \ sday | sunny \ svalley | day)\ b'[(demo)](https://regex101.com/r/iS9bY7/1) –

回答

2

您的正則表達式在「today」內匹配「day」,因爲它是輸入字符串中最左邊的(第一個)「day」子字符串。

用字邊界僅匹配全字:

\b(sunny()day|sunny()valley|day)\b 

regex demo

+1

就是這樣,我實際上在我的代碼生成的正則表達式中使用了\ b(\ bsunny()day \ b | \ bday \ b),但是我沒有得到想要的結果,並且您的建議在組外,現在我得到最長的匹配,謝謝!將在10分鐘內標記爲正確答案:) – perrohunter

1

爲了不產生額外的空間相匹配。關注OP的評論。我的建議是正則表達式:

\b(sunny\sday|sunny\svalley|day)\b(demo)


詩:

\s是空間

括號是沒有用的,因爲空間匹配不是在這種情況下可取的。

相關問題