Python 正则表达式将单词与第一个大写字母匹配
尝试使用正则表达式识别文本数据的结构并遇到障碍 对于下面的示例文本 我是一个标题:Python 正则表达式将单词与第一个大写字母匹配,python,regex,Python,Regex,尝试使用正则表达式识别文本数据的结构并遇到障碍 对于下面的示例文本 我是一个标题: Lorem Ipsum只是印刷的虚拟文本 以及排版业。Lorem Ipsum一直是该行业的佼佼者 16世纪以来的标准虚拟文本 我是一个标签-Lorem Ipsum只是印刷的虚拟文本 我下面的正则表达式选择“我是一个标题”和“我是一个标签-” ^\s*(?:\b[A-Z]+\b[\s]*)+(?:[:-])\s*$ 请建议编辑以匹配“我是标题”和“我是标签”以及 忽略结束标记“:”和“-”。您可以使用 ^\s*(
Lorem Ipsum只是印刷的虚拟文本 以及排版业。Lorem Ipsum一直是该行业的佼佼者 16世纪以来的标准虚拟文本 我是一个标签-Lorem Ipsum只是印刷的虚拟文本 我下面的正则表达式选择“我是一个标题”和“我是一个标签-”
^\s*(?:\b[A-Z]+\b[\s]*)+(?:[:-])\s*$
请建议编辑以匹配“我是标题”和“我是标签”以及
忽略结束标记“:”和“-”。您可以使用
^\s*(?:\b[a-zA-Z]+\b\s*)+(?=[:-])
看
正则表达式细分:
-字符串的开头^
-0或更多空格\s*
-1个或多个(?:\b[a-zA-Z]+\b\s*)+
-字边界(冗余)\b
-1个或多个字母[a-zA-Z]+
-0或更多空白\b\s*
-一种前瞻,要求(?=[:-])
或:
紧跟在前面的子模式之后-
这里的要点是将
[a-z]
添加到[a-z]
范围,删除\s*$
,并将(?:…)
非捕获组转到前瞻组(不使用字符)。这是@stribizev的解决方案,效果非常好
^\s*(?:\b[a-zA-Z]+\b\s*)+(?=[:-])
对于像我这样的新手,这是对解决方案的简单解释:
> ^\s Anchor to the white space (tab, newline, blankspace)
> * Look for repetition of white space if any
> (?: Start a non-capturing group
> \b Look for a word
> [a-zA-Z] Anyword that starts with either a capital or small alphabet
> + Look for repeating capital/small alphabets
> \s* Match a blank space after the word
> )+ Repeat
> (?= Ignore what follows (my best guess)
> [:-] Look for ':' or '-'
本质上,这个正则表达式在后跟“:”或“-”的换行中查找一组单词
通过添加{n,m}as,告诉上面的表达式超出您开始丢失相关信息的单词数,从而使上面的表达式更智能
^[\s]*(?:\b[a-zA-Z]+\b[\s]*){1,3}(?=[:-])
为什么要使用正则表达式<代码>用于行中的myword。拆分():如果myword[0]==myword[0]。upper()和myword[0]。isalpha():#做点什么我可以限制可以出现在结束标记之前的字数吗?说1到4个单词。怎么做?不用担心。知道了。谢谢。是的,我想用
{n}
替换+
,其中n
是数字{2}
是一个限制量词,正好匹配前面的子模式2次。我认为您不需要在{1,3}
之后使用+
,因为量词已经贪婪了。Python不支持所有格量词。@斯特里比雪夫:谢谢。编辑了答案。