【问题标题】:Regex - Count number of uppercase letters in word正则表达式 - 计算单词中大写字母的数量
【发布时间】:2021-09-25 13:32:56
【问题描述】:

我想查找文本中包含多个大写字母的所有单词。 到目前为止,我只检查最后一个字符是否为大写

\b.*[A-Z]\b

但如果我的条件是单词中的最后一个字母或总共两个字符是大写的,那会更精确。

【问题讨论】:

  • 使用\b(?:\w*[A-Z]){2}\w*

标签: python-3.x regex


【解决方案1】:

你可以使用

re.findall(r'\b(?:[a-z]*[A-Z]){2}[a-zA-Z]*\b', text)

请参阅regex demo详情

  • \b - 单词边界
  • (?:[a-z]*[A-Z]){2} - 两个零个或多个小写字母后跟一个大写字母的序列
  • [a-zA-Z]* - 零个或多个 ASCII 字母
  • \b - 单词边界

Python demo

import re
text = "A VeRy LoNG SenTence Here"
print(re.findall(r'\b(?:[a-z]*[A-Z]){2}[a-zA-Z]*\b', text))
# => ['VeRy', 'LoNG', 'SenTence']

使用PyPi regex library 可以实现完全识别Unicode 的正则表达式(使用pip install regex 安装在您的终端/控制台中):

import regex
text = "Да, ЭтО ОченЬ ДЛинное предложение."
print(regex.findall(r'\b(?:\p{Ll}*\p{Lu}){2}\p{L}*\b', text))
# => ['ЭтО', 'ОченЬ', 'ДЛинное']

this Python demo

【讨论】:

  • 仅供参考:\p{Ll} - 任何 Unicode 小写字母,\p{Lu} - 任何 Unicode 大写字母,\p{L} 匹配任何 Unicode 字母。
【解决方案2】:

\b(\w*[A-Z]\w*[A-Z]\w*|.*[A-Z])\b

解释:这将匹配任何结尾带有大写字母的单词(您的正则表达式已在此处重复使用)-或-零个或多个单词字符的字符串(\ w),后跟一个大写字母,然后是一串零个或多个单词字符 (\w),后跟一个大写字母,最后是另一个零个或多个单词字符。 \w 是 [A-Za-z0-9_] 的简写

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多