使用多种类型的空格字符在字符串中的每个单词上应用函数的最pythonic方法是什么?

Irv*_*van 1 python string whitespace

假设我有一个功能

def f(a):
  return a[::-1]
Run Code Online (Sandbox Code Playgroud)

我想将函数f应用于字符串上的每个单词.如果字符串只包含空格,我可以这样做

>>> s = '   this  is a banana   '
>>> ' '.join(map(f, s.split(' ')))
'   siht  si a ananab   '
Run Code Online (Sandbox Code Playgroud)

但是当字符串由多种类型的空格组成时,我该怎么做呢?(例如,\ t和\n)

例如,我想改变

'\t  \t this  is a\tbanana   \n'
Run Code Online (Sandbox Code Playgroud)

至

'\t  \t siht  si a\tananab   \n'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

使用正则表达式,该re.sub()函数接受一个函数来进行替换.匹配非空格:

re.sub(r'[^\s]+', lambda m: f(m.group(0)), s)
Run Code Online (Sandbox Code Playgroud)

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

演示:

>>> 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'
Run Code Online (Sandbox Code Playgroud)