正则表达式:删除斜线后的字符串,当它们超过一个单词时

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)。然后,/ 斜线应替换为空 space。结果应如下所示: 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

总的来说,只保留斜线后面的字符串,当它是一个单词时,在斜线所在的位置添加一个space。否则,删除斜杠后的字符串

到目前为止我已经尝试过这个正则表达式,但没有用: (?:[\/])([A-Z0-9]*\b)(?!\b[A-Z]*)|[^\/]*$

谢谢

您可以使用

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 demo online。输出:

CENTRAL CARE HOSPITAL
ELEMENTARY INSTITUTION
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20

正则表达式是 /(\w+(?:\W+\w+)+\W*$)?,参见 its online demo。它匹配:

  • / - 斜杠
  • (\w+(?:\W+\w+)+\W*$)? - 匹配的可选捕获组#1
    • \w+ - 1+ 个单词字符
    • (?:\W+\w+)+ - 1+ 1+ 个非单词字符序列,后跟 1+ 个单词字符
    • \W* - 零个或多个非单词字符
    • $ - 字符串结尾。