2 回答

TA贡献1909条经验 获得超7个赞
根据您所说的您想要的内容以及您所说的“我有字符串”这一事实:
我有字符串
'Aaa Bbb'、'AaaBbbCcc'、'OneTwost.Three'
这些应该可以。
输入:
>>> import re
>>> string = """'Aaa Bbb', 'AaaBbbCcc' ,'OneTwost.Three'"""
输出:
>>> re.sub(r'((?<![\',\s])[A-Z]+|[\S]{2}\.)', r' \1', string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
.
编辑
输入(作用于删除's 的string新变量)string_1'
>>> import re
>>> string = """'Aaa Bbb', 'AaaBbbCcc' ,'OneTwost.Three'"""
>>> string_1 = """Aaa Bbb, AaaBbbCcc ,OneTwost.Three"""
输出
>>> re.sub(r'(?<!^)(?<!,)(?<!\s)(?<!\')([A-Z]+|[\S]{2}\.)', r' \1', string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
>>> re.sub(r'(?:(?<!^)(?<!,)(?<!\s)(?<!\'))([A-Z]+|[\S]{2}\.)', r' \1',
string)
"'Aaa Bbb', 'Aaa Bbb Ccc' ,'One Two st. Three'"
>>> re.sub(r'(?<!^)(?<!,)(?<!\s)(?<!\')([A-Z]+|[\S]{2}\.)', r' \1', string_1)
'Aaa Bbb, Aaa Bbb Ccc ,One Two st. Three'
>>> re.sub(r'(?:(?<!^)(?<!,)(?<!\s)(?<!\'))([A-Z]+|[\S]{2}\.)', r' \1', string_1)
'Aaa Bbb, Aaa Bbb Ccc ,One Two st. Three'
.
第一个解释:
按照您的报价建议将其设为字符串
使用应用re.sub在这种情况下与raw_string(R)选项,以允许动态的印刷/变更/可变捕捉功能,并返回一个编辑的字符串
第一个
"("
我将它设置为捕获后续查询中的所有内容随着
"(?<![\',\s])"
我的意思化妆确保接下来该我试图捕获不是由“'”或‘空白’开头"[A-Z]+"
定位在它所在的位置,我是说捕获任何一组大写字母(但注意:这也将匹配 ABC、SDZ、FFRD、ZXF 等,但不会捕获任何小写字母或其他符号)随着
"|"
我说的是重新引擎“或”捕捉这一个查询并与
"[\S]{2}\."
我说的捕获,如果你发现任何2“非空白字符”后跟一个“”最后
")"
结束捕获组指令.
使用第二个参数 "r' \1'" 我是说打印你捕获的第一组(在这种情况下我只有一个捕获组)并在它前面放置一个空格
编辑:对可以作用于 string_1 的以下 2 的轻微解释
我发誓,
re.sub
环顾四周的行为只是不稳定。鉴于您在下面的评论。通过每个(?<!YOUR_IGNORED_CHARACTER)
,我告诉 re.sub 如果大写字母前面是指定字符,则基本上不捕获。(?<!^)
但是,如果捕获组出现在行的开头,则表示不捕获。另请注意,在此示例的字符串中,我已从
'
您提供的字符串中删除了。

TA贡献1842条经验 获得超21个赞
你可以用
(?<=\S)(?=[A-Z])|(.{2}\.)
需要用函数替换,参见regex101.com上的演示。
在Python 这可能是
import re
data = """
Aaa Bbb
AaaBbbCcc
OneTwost.Three
"""
rx = re.compile(r'(?<=\S)(?=[A-Z])|(.{2}\.)')
def replacer(match):
if match.group(1):
return " {} ".format(match.group(1))
return r' '
data = rx.sub(replacer, data)
print(data)
哪个产量
Aaa Bbb
Aaa Bbb Ccc
One Two st. Three
添加回答
举报