繁体   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