使用lambda表达式过滤字符串

时间:2015-10-09 09:03:36

标签: python

如何使用Lambda表达式在操作数之前将1-9中的所有数字连接在一起?

如果我有像

这样的字符串
Str = "21 2 4 + 21 1"

并希望它形成:

newStr = "2124"

4 个答案:

答案 0 :(得分:2)

为什么不使用正则表达式?

import re
s = "21 2 4 + 21 1"
new_s = re.match(r'([\d ]+)[-+/*]', s).group(1).replace(' ', '')

还是使用字符串方法?

s = "21 2 4 + 21 1"
new_s = s.split('+')[0].replace(' ', '')

答案 1 :(得分:0)

最简单的答案是用空字符串替换所有空格:

"21 2 4 + 21 1".replace(' ', '')  # DO NOT DO THIS

实际上,最好的答案是检查数据的获取方式以及是否可以先处理数据。此外,这个看起来非常不安全,可能导致大量错误。

答案 2 :(得分:0)

只是因为你要求过滤lambda:

>>> import re
>>> s = "21 2 4 + 21 1"
>>> ''.join(filter(lambda c: c in '123456789', re.split('[+-/*]', s)[0]))
2124

答案 3 :(得分:0)

将此放在这里有两个原因:

  1. 接受的答案不使用像OP要求的lambda
  2. OP请求拆分操作数(在示例中使用+)
  3. 这基本上是相同的方法,但考虑到额外的操作数[+, - ,*,/],使用lambda,如果字符串中不存在操作数,它将不会失败:

    import re
    s = ["12 3 65 + 42", "1 8 89 0 - 192", "145 7 82 * 2"]
    map(lambda x: re.split("[\+\-\*\/]", x)[0].replace(" ", ""), s)
    

    将输出

    ['12365', '18890', '145782']