python中特定字符串的正则表达式问题
我对python中的正则表达式有问题。我有字符串:python中特定字符串的正则表达式问题,python,regex,Python,Regex,我对python中的正则表达式有问题。我有字符串: 'aaabbbb'、'AaaBbbCcc'、'OneTwost.Three' 我想得到: `'Aaa Bbb', 'Aaa Bbb Ccc'` and 'One Two st.Three' or 'One Two st. Three' 通常,我需要在每个大写字母之前插入空格(如果大写字母之前是空格以外的另一个符号),如果字符串中存在。(点)然后将空格2位置向后插入 我对re-library很在行。我试着根据堆栈中关于regex的几个主题来做
'aaabbbb'、'AaaBbbCcc'、'OneTwost.Three'
我想得到:
`'Aaa Bbb', 'Aaa Bbb Ccc'`
and 'One Two st.Three' or 'One Two st. Three'
通常,我需要在每个大写字母之前插入空格(如果大写字母之前是空格以外的另一个符号),如果字符串中存在。(点)然后将空格2位置向后插入
我对re-library很在行。我试着根据堆栈中关于regex的几个主题来做这件事,但我不明白这一点。有人知道怎么做吗?你可以用
(?<=\S)(?=[A-Z])|(.{2}\.)
产生
Aaa Bbb
Aaa Bbb Ccc
One Two st. Three
你可以用
(?<=\S)(?=[A-Z])|(.{2}\.)
产生
Aaa Bbb
Aaa Bbb Ccc
One Two st. Three
根据你所说的你想要的和你说“我有字符串”的事实: 我有绳子 “Aaa Bbb”,“AAABBCC”,“一对三” 这些应该可以做到 输入:
>>> 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'"
输出:
>>> 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'"
输出
>>> 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(r'(?)?
使用”(?
使用“[\S]{2}\”
我的意思是,如果发现任何2个“非空白字符”后跟“.”,则执行捕获
最后一个“””
结束捕获组指令
对于第二个参数“r'\1'”,我的意思是打印您捕获的第一个组(在本例中,我只有一个捕获组),并在其前面放置一个空格
编辑:对以下2个可作用于字符串_1的内容进行轻微解释
- 我发誓,
re.sub
的lookarounds行为是不可靠的。鉴于您下面的评论。通过每个(?),我告诉re.sub如果大写字母前面有指定字符,则本质上不要捕获。(?)但是,如果捕获组出现在行的开头,则表示不捕获
- 另外请注意,在本例的字符串中,我已从您给出的字符串中删除了
“
基于您所说的您想要的,以及您所说的“我有字符串”:
我有绳子
“Aaa Bbb”,“AAABBCC”,“一对三”
这些应该可以做到
输入:
>>> 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'"
输出:
>>> 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'"
输出
>>> 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(r'(?)?
使用”(?
使用“[\S]{2}\”
我的意思是,如果发现任何2个“非空白字符”后跟“.”,则执行捕获
最后一个“””
结束捕获组指令
对于第二个参数“r'\1'”,我的意思是打印您捕获的第一个组(在本例中,我只有一个捕获组),并在其前面放置一个空格
编辑:对以下2个可作用于字符串_1的内容进行轻微解释
- 我发誓,
re.sub
的lookarounds行为是不可靠的。鉴于您下面的评论。通过每个(?),我告诉re.sub如果大写字母前面有指定字符,则本质上不要捕获。(?)但是,如果捕获组出现在行的开头,则表示不捕获
- 另外请注意,在本例的字符串中,我已从您给出的字符串中删除了
“
谢谢你的帮助。这对我来说很有魔力。你知道如何考虑特定的字母吗?比如波兰单词:“Ttt?”老实说,关于你的第二个问题,我不知道你是什么意思,但我会发表另一条评论,看看这是否有帮助。我试过了,但波兰语字母使正则表达式中断。对那个人感到抱歉。我的意思是,现在你的正则表达式在每个大写字母前插入空格(包括第一个单词)我需要的解决方案是跳过第一个单词,在每个大写字母(如您的代码)和大写波兰语字母(“ŚĆŻŹĄĘŁÓŃ”)前插入空格,在点符号(“.”)前插入两个字符谢谢你的帮助。这对我来说是很神奇的。你有没有想过怎样去考虑特定的字母,比如波兰单词:“Ttt?”?老实说。关于你的第二个问题,我不知道你的意思,但我会发表另一条评论,看看这是否有帮助。我尝试过,但波兰语字母使正则表达式中断。对不起那个人。我的意思是,现在你的正则表达式在每个大写字母前插入空格(包括第一个单词)我需要的解决方案是跳过第一个单词,在每个大写字母(如您的代码)和大写波兰语字母(“ŚĆŻŹĄĘŁÓŃ”)前插入空格,在点符号(“.”)前插入两个字符。