我想找到一种优雅而有效的方法,将字符串中由空格分隔的所有连续出现的单个字母数字字符连接成单词。这是我想做的一个例子:
a = 'a b c zzz a yyy a 2 xxx 2 3 wwww a c'
Desired_result = 'abc zzz a yyy a2 xxx 23 wwww ac'
这是我使用循环的结果,但我确信有一些优雅的解决方案。
def myFunc(instring):
b,result = instring.split(),''
for i,row in enumerate(b):
if i==0:
result = row
else:
if len(row) == 1 and len(b[i-1]) == 1 and \
row.isalnum() and b[i-1].isalnum():
result = result + row
else:
result = result + ' ' + row
else:
return result
a = 'a b c zzz a yyy a 2 xxx 2 3 wwww a c'
print myFunc(a)
a_punct = '! @ 23 xxx cv abd $ abcd a c #'
print myFunc(a_punct)
请您参考如下方法:
这是一个正则表达式解决方案:
>>> a = 'a b c zzz a yyy a 2 xxx 2 3 wwww a c'
>>> re.sub(r'(?<=\b\w)\s+(?=\w\b)', '', a)
'abc zzz a yyy a2 xxx 23 wwww ac'
它删除前面有单个字母数字字符 (\s+) 和后面有单个字母数字字符 ((?<=\b\w)) 的任何空格 ((?=\w\b))。 \w是字母数字字符或下划线(将其替换为 [a-zA-Z0-9] 仅用于字母数字),并且 \b是一个单词边界,它确保字母数字字符后面/前面没有另一个字符。
