如何使用Lambda表达式在操作数之前将1-9中的所有数字连接在一起?
如果我有像
这样的字符串Str = "21 2 4 + 21 1"
并希望它形成:
newStr = "2124"
答案 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)
将此放在这里有两个原因:
这基本上是相同的方法,但考虑到额外的操作数[+, - ,*,/],使用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']