我正在嘗試更正地址資料,其中街道地址和城市/城鎮資訊被附加而沒有空格。
識別分割點的最簡單方法是查找道路型別(例如 STREET、ST.)后跟一個單詞,例如:
1201 WEST FRONT STREETCHESTER PA 19013-3496
然而,一些分裂發生在其他詞上,例如 SOUTH。我們暫時不需要檢測這些。
703 6TH STREET SOUTHTEXAS CITY TX 77590
以下正則運算式,
(ST(?:REET)?)\.?([A-Z]{3,})
適用于大多數示例,但將匹配第二個示例中的 ST REET。默認情況下 IIRC 正則運算式是貪婪的,所以我不明白為什么會發生這種情況。我的理解是第一個捕獲組應該防止第二個被觸發。我試過將正則運算式重寫為(STREET|ST)\.?([A-Z]{3,}),但這并沒有改變任何東西。
有什么方法可以幫助重寫正則運算式或編譯標志嗎?
解決方案
對于那些感興趣的人,使用 Michal 的正則運算式作為起點,我使用的最后一個正則運算式是:
\s((?:(?!STREET|STATE)ST|STREET|LANE|LN|(?!DRIVE)DR|DRIVE|ROAD|RD|[0-9] |(?!AVENUE)AVE|AVENUE|BOULEVARD|BLVD|HWY|HIGHWAY|WEST|EAST|(?!NORTHEAST|NORTHWEST)NORTH|(?!SOUTHEAST|SOUTHWEST)SOUTH|N\.|S\.|W\.|E\.)\.?)(?=[A-Z]{3,})
它處理街道、車道、車道、大道、大道、高速公路,并在主要方向上拆分 EPA 的 TSCA 資料。
uj5u.com熱心網友回復:
你可以使用模式:
( (?!STREET)ST|STREET)(?=[A-Z])
解釋:
(...) - 捕獲組
- 字面上的匹配空間
(?!...) - 否定前瞻斷言
STREET-STREET字面上匹配
ST-ST字面上匹配
| - 交替運算子
(?=...) - 正向前瞻斷言
[A-Z]- 字符類 - 匹配范圍內的字符A-Z,因此任何大寫英文字符
替換模式將是\1 ,因此首先捕獲組(ST或STREET),然后是空格。
正則運算式演示
uj5u.com熱心網友回復:
(ST(?:REET)?)\.?([A-Z]{3,})and(STREET|ST)\.?([A-Z]{3,})都匹配單個單詞的原因STREET是正則運算式必須匹配整個 pattern,并注意 the.是可選的。
由于點是可選的,正則運算式可以匹配STREET[A-Z]{3,}或ST[A-Z]{3,}
第一個不能匹配單詞 STREET,因為 STREET 之后應該有 3 個或更多字符,但第二個模式可以匹配 ST 和 3 個或更多字符....匹配 STREET。
您可以做的是匹配 STREET 和 3 個或更多字符,或者匹配 ST。和 3 個或更多字符不匹配單詞 STREET only
(STREET|ST\.)([A-Z]{3,})
正則運算式演示
其他可能的選擇:
1.) 僅當 REET 后面沒有單詞邊界時才匹配 ST 并可選地匹配 REET:
\bST(?!REET\b)(?:REET)?
正則運算式演示
2.) 使用正則運算式PyPy 模塊,使用可選的非捕獲組和所有格量詞,后跟非單詞邊界:
\bST(?:REET)? \B
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354315.html
上一篇:Robotframework-在python中作業的正則運算式不匹配
下一篇:正則運算式與grep的兼容性
