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

Remove string after slash with condition

我想删除短语中超过 3 个字符(字母和数字)的第二部分,如果字符不超过 3 个,则添加 space。

在以下测试集中:

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' ',
             text,
             0,
             re.IGNORECASE)

我收到以下错误信息:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS 
ABC DEF
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO 
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 ",
       "ABC/DEF",
       "FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO",
       "HAPPY SPRING BREAK 20/20"]

for element in text:
    str_res = re.sub(r'(?:[\/])([A-Z0-9]{0,3}\b)|[^\/]*$',
                     r' ',
                     element,
                     0,
                     re.IGNORECASE)
    print(str_res)

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

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

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

在替换中使用 2 个捕获组

r" "

说明

  • \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})/([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" ", text)
print (result)

输出

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