簡體   English   中英

正則表達式:當字符串多於一個單詞時刪除斜杠后的字符串

[英]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) )

在線查看Python 演示 輸出:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM