jeck猫
根据您所说的您想要的内容以及您所说的“我有字符串”这一事实:我有字符串'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 如果大写字母前面是指定字符,则基本上不捕获。(?<!^)但是,如果捕获组出现在行的开头,则表示不捕获。另请注意,在此示例的字符串中,我已从'您提供的字符串中删除了。