在一行句子中连续的大写字符串最好使用python中的reduce或map函数

2024-06-10 03:04:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,我试图得到一个句子中所有连续的大写字母字符串。我试过以下方法,输出为'LJ'

我还没弄明白为什么它不添加STRRHLLJ,但它只添加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. Here it should give ["ABCD AAA","JJJJJJ"]

感谢您的帮助。你知道吗

使用Reduce我终于想到了这一点,但效率不高:

reduce(lambda x, y : x[0:len(x)-1] + [x[-1]+y] if y.isupper() or y.isspace() else x + [""] if not x[-1].strip() is "" else x,"STRR Hello HLLJ", [""])


Tags: orlambda字符串reducehelloifelseabcd
3条回答

在字符串中查找模式是^{} 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字母。你知道吗

为了完整起见,使用^{}的另一个解决方案是:

>>> s = "STRR hello HLLJ"
>>> [''.join(g) for k, g in itertools.groupby(s, key=str.isupper) if k]
['STRR', 'HLLJ']

使用正则表达式和^{}

>>> asd="HELLO worLD"
>>> import re
>>> re.findall("[A-Z\s]+",asd)
['HELLO', 'LD']

说明:

  • [A-Z\s]+匹配一个或多个后续大写字母或空格
  • findall返回所有匹配项的列表。你知道吗

相关问题 更多 >