import re
pat = re.compile(r"^\s*[A-Z]+|[.?!]\s*[A-Z]+|([A-Z][^\s.?!]*)")
text = "A sentence containing Capital letters. How to Extract only capital letters?"
for m in pat.findall(text):
if m:
print(m)
import re
s = "A sentence containing Capital letters. How to Extract only capital letters?"
pattern = r"\b\s+([A-Z][a-z]*)"
print(re.findall(pattern, s))
import regex
pat = regex.compile(r"(?:(?:[.!?]\h*[A-Z]|^\h*[A-Z])(*SKIP)(*FAIL))|\b[A-Z]\w*")
text = "A sentence containing Capital letters. How to Extract only capital letters?"
for m in pat.findall(text):
if m:
print(m)
4条答案
按热度按时间hrirmatl1#
一个可能的解决方案是,找到所有的模式,但是只在你想要匹配的模式上使用捕获组(regex101):
字符串
打印:
型
pw136qt22#
@Andrej的解决方案将返回一个空值列表,其中为您的示例数据找到了其他大写的单词(即
A
和How
):字符串
如果你想 * 只 * 返回大写的单词,那么使用负向后查找:
型
这匹配任何前面没有
.
,,
或?
的大写单词。注意,我们还在否定后向中包括\s
,以确保我们不匹配句子开头的两个空格的单词,例如。型
如果
\s
未包含在后向中,则将匹配Start
。regex101上的正则表达式演示
在python中:
型
输出量:
型
rryofs0p3#
一个更广泛的匹配,使用单词边界来查找单词之间出现的大写单词(不具体考虑
.
!
和?
):字符串
参见regex demo。
例如
型
输出
型
jexiocij4#
尝试
字符串
演示:https://regex101.com/r/SmcmBW/latest
(?:(?:<unwanted_option1>|<unwanted_option2>)(*SKIP)(*FAIL))
构造忽略所有不需要的选项,利用这个“技巧”(https://www.rexegg.com/regex-best-trick.html)。您可以稍后轻松添加更多限制。在这种情况下,它可以防止.!?
位于大写单词之前,以及单词是一行中的第一个。\b[A-Z]\w*
选择所有大写单词。使用更强大的
regex
包的Python代码段:型