正则表达式:删除斜线后的字符串,当它们超过一个单词时
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*
- 零个或多个非单词字符
$
- 字符串结尾。
当字符串中有多个单词时,如何删除斜线后的字符串?具体来说,考虑以下字符串:
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*
- 零个或多个非单词字符$
- 字符串结尾。