这里我试图获取一个句子中所有连续的大写字母字符串。我尝试了以下输出为“LJ”
我一直无法弄清楚为什么它不添加 STRR
和 HLLJ
但它只添加 LJ
而不是列表。它是否假定 [""]
为字符串。
reduce(lambda x ,y : x[-1] + (y) if y.isupper() or y.isspace() else x,"STRR hello HLLJ",[""])
我的输入是:
STRR hello HLLJ
我希望得到一个输出 ["STRR","HLLJ"]
测试用例:
ABCD AAA lkjl JJJJJJ。这里应该给出 ["ABCD AAA","JJJJJJ"]
感谢任何帮助。
使用 Reduce 我终于想到了这个,但效率不高:
reduce(lambda x, y : x[0:len(x)-1] + [x[-1]+y] 如果 y.isupper() 或 y.isspace() 否则 x + [ ""] if not x[-1].strip() is ""else x,"STRR Hello HLLJ", [""])
最佳答案
在字符串中查找模式是 re
module 的内容用于:
In [1]: import re
In [2]: re.findall("[A-Z]+(?: [A-Z]+)*", "ABCD AAA lkjl JJJJJJ")
Out[2]: ['ABCD AAA', 'JJJJJJ']
或者,如果您不想包含属于另一个词的大写字母,您可以使用 word boundary anchors 排除它们。 :
In [3]: re.findall(r"\b[A-Z]+(?: [A-Z]+)*\b", "ABCD AAA Lkjl JJJJJJ")
Out[3]: ['ABCD AAA', 'JJJJJJ']
警告:这只查找 ASCII 字母。
关于python - 一行中的连续资本运行字符串最好在 python 中使用 reduce 或 map 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33412629/