正则表达式:正斜线后的字符串多于一个单词时删除

当字符串中有多个单词时,如何在斜杠后删除字符串?具体来说,请考虑以下字符串:

    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[A-Z]*)|[^\/]*$

谢谢

fgvlty 回答:正则表达式:正斜线后的字符串多于一个单词时删除

您可以使用

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*-零个或多个非单词字符
    • $-字符串的结尾。
本文链接:https://www.f2er.com/2649104.html

大家都在问