带条件的斜杠后删除字符串

我想删除短语中的第二部分,只要该部分的长度超过3个字符(字母和数字),并且如果字符不超过3个,则添加空格。

在以下测试集中:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS
ABC/DEF
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO
HAPPY SPRING BREAK 20/20

结果应为

CENTRAL CARE HOSPITAL
ABC DEF
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20

我的第一次尝试是

([^\/]+$)

但是,斜杠后的所有字符串都消失了,因为它没有任何限制。我需要包含一个否定的前瞻性声明,当斜杠后的字符串超过3个字符时,我需要删除这些字符串:

text= re.sub(r'(^[^\/]+)(?:[\/])(?![A-Z]{3})',r'\1 ',text,re.IGNORECASE)

我得到以下不正确的信息:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS 
ABC DEF
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO 
HAPPY SPRING BREAK 20 20

如何摆脱前面的斜杠和字符串?

谢谢

fj9921 回答:带条件的斜杠后删除字符串

您可以使用2个捕获组来捕获/前后的1-3个字符A-Z或数字,并使用这些组替换它们之间的空格。

使用交替字符匹配正斜杠,然后删除其余的字符串。

\b([A-Z0-9]{1,3})/([A-Z0-9]{1,3})\b|/.*

在替换中,使用2个捕获组

r"\1 \2"

说明

  • \b字边界
  • ([A-Z0-9]{1,3})捕获组1 ,匹配1-3次A-Z或数字
  • /字面上匹配
  • ([A-Z0-9]{1,3})捕获第2组,匹配1-3次A-Z或一个数字
  • \b字边界
  • |
  • /.*匹配/并与除换行符以外的所有字符匹配0+次

Regex demo | Python demo

示例代码

import re

regex = r"\b([A-Z0-9]{1,3})\b|/.*"

text = ("CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS\n"
    "ABC/DEF\n"
    "FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO\n"
    "HAPPY SPRING BREAK 20/20")

result = re.sub(regex,r"\1 \2",text)
print (result)

输出

CENTRAL CARE HOSPITAL 
ABC DEF
FOUNDATION INSTITUTION 
HAPPY SPRING BREAK 20 20
,

您必须使用正则表达式吗?这样做怎么了?

tests = [
    "CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS","ABC/DEF","FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO","HAPPY SPRING BREAK 20/20"
]

for test in tests:
    separate = test.split("/",1)
    print(separate[0] if len(separate[1])>3 else test)
,

尝试以下正则表达式模式:

text= ["CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS ","HAPPY SPRING BREAK 20/20"]

for element in text:
    str_res = re.sub(r'(?:[\/])([A-Z0-9]{0,3}\b)|[^\/]*$',r' \1',element,re.IGNORECASE)
    print(str_res)
本文链接:https://www.f2er.com/2650067.html

大家都在问