删除带有条件的斜杠后的字符串
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+ 次除换行符外的任何字符
示例代码
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
我想删除短语中超过 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+ 次除换行符外的任何字符
示例代码
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