2017-07-18 45 views
3

我需要從字符串中提取匹配(路,道路,街道和街道)前後每個單詞的單詞,直到逗號','字符或數字在前面。正則表達式:提取並匹配特定單詞在兩個字符之間

Sample Strings:
1. Yeet Road,Off Mandy Plant Way,Mando GRA。 2. 3A,圓滑的車道,在Tremble Rake街下車。
3. 57蘿蔔SLIST路伊科伊

結果應該是儘可能接近到:

  1. Yeet路
  2. 曼迪種植方式
  3. 顫抖耙街
  4. 蘿蔔SLIST路伊科伊

根據一些堆棧的答案,這是我目前有:
(?<=\,)(.*Way|Road|Str|Street?)(?=\,)

任何幫助,將不勝感激。

+1

也許類似https://regex101.com/r/XSmCbL/1 –

+0

@WiktorStribiżew謝謝。這是朝着正確方向邁出的一步。 需要建立它,以忽略最後的結果 –

+2

也許https://regex101.com/r/XSmCbL/2 –

回答

2

你可以嘗試這樣的事情(與ignore_case標誌)

\b(?:(?!off\b)[a-z]+[^\w,\n]+)*?\b(?:way|road|str(?:eet)?)\b(?:[^\w,\n]+[a-z]+)* 

demo

然而這樣的模式,即開始描述一個未定義長度的未定義子在模式的字面部分(關鍵字)之前,效率不高。這對小字符串無關緊要,但不能用於大字符串。

要排除特定的詞,您可以更改(?!off\b)(?!off\b|word1\b|word2\b|...)

此外,您還需要更精確的瞭解單詞之間是允許或不允許哪些字符。

1

您可以考慮使用

^\d+\s*(*SKIP)(*F)|\b[^,]*\b(?:way|r(?:oa)?d|str(?:eet)?)\b[^,]*\b 

regex demo

詳細

  • ^\d+\s*(*SKIP)(*F) - 比賽和省略了最初的1個或多個數字,然後0+空格處字符串開頭
  • | - 或匹配...
  • \b[^,]*\b(?:way|r(?:oa)?d|str(?:eet)?)\b[^,]*\b - 除逗號之外的任何0+字符,然後是非捕獲組中的任何替代字詞作爲整個字詞,然後又是逗號以外的0+字符,整個子模式匹配在單詞邊界內避免匹配前導/尾隨標點/空白。
+0

這很好,謝謝你。但沒有刪除'關',不像@ casimir-et-hippolyte答案。雖然他慢一點比較準確。 –

+0

@JonathanItakpe隨意接受最適合你的那個。 –

相關問題