什么';对包含多种类型空格字符的字符串中的每个单词应用函数的最具Python风格的方法是什么?

什么';对包含多种类型空格字符的字符串中的每个单词应用函数的最具Python风格的方法是什么?,python,string,whitespace,Python,String,Whitespace,假设我有一个函数 def f(a): return a[::-1] 我想将函数f应用于字符串上的每个单词。如果字符串只包含空格,我可以 >>> s = ' this is a banana ' >>> ' '.join(map(f, s.split(' '))) ' siht si a ananab ' 但是,当字符串由多种类型的空格组成时,我该怎么做呢?(例如,\t和\n) 例如,我想要改变 '\t \t this is a\

假设我有一个函数

def f(a):
  return a[::-1]
我想将函数f应用于字符串上的每个单词。如果字符串只包含空格,我可以

>>> s = '   this  is a banana   '
>>> ' '.join(map(f, s.split(' ')))
'   siht  si a ananab   '
但是,当字符串由多种类型的空格组成时,我该怎么做呢?(例如,\t和\n)

例如,我想要改变

'\t  \t this  is a\tbanana   \n'


使用正则表达式,您可以轻松获得整词和整段连续空格。

使用正则表达式,您可以轻松获得整词和整段连续空格。

使用正则表达式,接受函数进行替换。改为匹配非空白:

函数被传递一个函数;使用
.group(0)
可以提取匹配的文本并将其传递给函数。返回值用于替换输出字符串中的原始匹配文本

演示:


如果使用正则表达式,则接受函数进行替换。改为匹配非空白:

函数被传递一个函数;使用
.group(0)
可以提取匹配的文本并将其传递给函数。返回值用于替换输出字符串中的原始匹配文本

演示:


而且,你还想保留加入时分割的内容?@AKS是的,我想保留白色空间的类型,你还想保留加入时分割的内容?@AKS是的,我想保留白色空间的类型即使函数很复杂,你也可以这样做吗?(例如,数据库访问的结果)是的,基本上,您希望使用
re.split('\s*',您的_text)
仅获取空格或类似的内容。@irvan,
re.sub
采用可调用的第二个参数,以便该方法可以工作。即使函数很复杂,您也可以这样做吗?(例如,数据库访问的结果)是的,基本上您希望使用
re.split('\s*',您的\u text)
仅获取空格或类似的内容。@irvan,
re.sub
采用可调用的第二个参数,以便该方法可以工作。谢谢!这太棒了,谢谢!这太棒了
'\t  \t siht  si a\tananab   \n'
re.sub(r'[^\s]+', lambda m: f(m.group(0)), s)
>>> import re
>>> def f(a):
...   return a[::-1]
...
>>> s = '\t  \t this  is a\tbanana   \n'
>>> re.sub(r'[^\s]+', lambda m: f(m.group(0)), s)
'\t  \t siht  si a\tananab   \n'