假设我有以下清单
shuffle()
并希望将其转换为
['Y M C A','cambridge m a','d m v office','t mobile']
用于检测所有连续的单个字符,后跟不同长度的单个空格(大于2)。例如,项['YMCA','cambridge ma','dmv office','t mobile']
,我们应该检测到'd m v office'
并将其转换为**'d m v'**
,但会保留**'dmv'**
完整(只有一个字符)。
我知道我可以遍历列表,按空格分割每个项目并查找单个字符项但听起来效率不高。是否可以使用正则表达式和模块重新进行?连续的模式可以是任何长度,大于1。
答案 0 :(得分:1)
以下内容应该有效:
import re
def trim_match_spaces(matchObj):
return ''.join(matchObj.group(0).split())
templist = ['Y M C A', 'cambridge m a', 'd m v office', 't mobile', 'cambridge m a is far from the sun']
for index, word in enumerate(templist):
templist[index] = re.sub(r'(\b(\w\s)+\w\b)', trim_match_spaces, word)
print templist
打印
['YMCA', 'cambridge ma', 'dmv office', 't mobile', 'cambridge ma is far from the sun']
答案 1 :(得分:0)
使用正则表达式sub
对我有用:
text = 'd m v office'
out = re.sub(r'(.) (.)(?:\s+|$)',r'\1\2',text)
print(out) #<-- prints 'dmv office'
第一个参数是要匹配的模式,它有3个捕获组,前两个是匹配由空格分隔的单个字符的(.) (.)
。 (?:\s+|$)
匹配字符串的空格或结尾。第二个参数表示用前两个捕获组替换命中,第三个参数是文本输入。
答案 2 :(得分:0)