python中特定字符串的正则表达式问题

我在 python 中遇到正则表达式问题。我有字符串:

'Aaa Bbb', 'AaaBbbCcc' ,'OneTwost.Three'

我想得到:

`'Aaa Bbb', 'Aaa Bbb Ccc'` 
and 'One Two st.Three' or 'One Two st. Three'

通常,我需要在每个大写字母之前插入空格(如果大写字母之前是另一个符号而不是空格)并且如果在字符串中存在。(点)比插入空格 2 位置靠后。

我是 re 图书馆的初学者。我尝试根据堆栈中关于正则表达式的一些主题来执行此操作,但我不明白这一点。任何人都知道如何做到这一点?


慕桂英4014372
浏览 181回答 2
2回答

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',&nbsp;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])"&nbsp;我的意思化妆确保接下来该我试图捕获不是由“'”或‘空白’开头"[A-Z]+"定位在它所在的位置,我是说捕获任何一组大写字母(但注意:这也将匹配 ABC、SDZ、FFRD、ZXF 等,但不会捕获任何小写字母或其他符号)随着"|"我说的是重新引擎“或”捕捉这一个查询并与"[\S]{2}\."我说的捕获,如果你发现任何2“非空白字符”后跟一个“”最后")"结束捕获组指令.使用第二个参数 "r' \1'" 我是说打印你捕获的第一组(在这种情况下我只有一个捕获组)并在它前面放置一个空格编辑:对可以作用于 string_1 的以下 2 的轻微解释我发誓,re.sub环顾四周的行为只是不稳定。鉴于您在下面的评论。通过每个(?<!YOUR_IGNORED_CHARACTER),我告诉 re.sub 如果大写字母前面是指定字符,则基本上不捕获。(?<!^)但是,如果捕获组出现在行的开头,则表示不捕获。另请注意,在此示例的字符串中,我已从'您提供的字符串中删除了。

茅侃侃

你可以用(?<=\S)(?=[A-Z])|(.{2}\.)需要用函数替换,参见regex101.com上的演示。在Python 这可能是import redata = """Aaa BbbAaaBbbCccOneTwost.Three"""rx = re.compile(r'(?<=\S)(?=[A-Z])|(.{2}\.)')def replacer(match):&nbsp; &nbsp; if match.group(1):&nbsp; &nbsp; &nbsp; &nbsp; return " {} ".format(match.group(1))&nbsp; &nbsp; return r' 'data = rx.sub(replacer, data)print(data)哪个产量Aaa BbbAaa Bbb CccOne Two st. Three
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python