[英]Regex: remove strings after slash just when they are more than one word
當字符串中有多個單詞時,如何在斜杠后刪除字符串? 具體來說,請考慮以下字符串:
0 1 2 0 1 2 3
CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS
斜線后的所有字符都應該刪除,因為有 4 個單詞(HOPITAL、CENTRALE、DE、SOINS)並且限制只有一個。 那么結果是: CENTRAL CARE HOSPITAL
另一方面,我們有以下字符串:
0 1 2 3 0
HAPPY SPRING BREAK 20/20
20
這次必須保留,因為它只是一個單詞( \\b[A-Za-z0-9]\\b
)。 然后, /
斜杠應替換為空格。 結果應如下所示: HAPPY SPRING BREAK 20 20
假設有以下測試集:
CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS
ELEMENTARY/INSTITUTION
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO
HAPPY SPRING BREAK 20/20
結果應如下所示:
CENTRAL CARE HOSPITAL
ELEMENTARY INSTITUTION
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20
總的來說,只要在斜線是一個單詞時將字符串保留在斜線之后,並在斜線所在的位置添加一個空格。 否則,刪除斜線后的字符串
到目前為止,我已經嘗試過這個正則表達式,但沒有用: (?:[\\/])([A-Z0-9]*\\b)(?!\\b[AZ]*)|[^\\/]*$
謝謝
您可以使用
import re
rx = r'/(\w+(?:\W+\w+)+\W*$)?'
strs = ['CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS','ELEMENTARY/INSTITUTION','FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO','HAPPY SPRING BREAK 20/20']
for s in strs:
print( re.sub(rx, lambda x: "" if x.group(1) else " ", s) )
CENTRAL CARE HOSPITAL
ELEMENTARY INSTITUTION
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20
正則表達式是/(\\w+(?:\\W+\\w+)+\\W*$)?
,查看其在線演示。 它匹配:
/
- 斜線(\\w+(?:\\W+\\w+)+\\W*$)?
- 匹配的可選捕獲組 #1
\\w+
- 1+ 個字字符(?:\\W+\\w+)+
- 1+ 序列 1+ 非字字符后跟 1+ 字字符\\W*
- 零個或多個非單詞字符$
- 字符串的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.