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