正则表达式匹配第一个大写字母

时间:2015-10-22 20:36:55

标签: python regex

尝试使用正则表达式识别我的文本数据的结构并点击路障。

下面的示例文本

  

我是一个标题:
  Lorem Ipsum只是打印的虚拟文本   和排版行业。 Lorem Ipsum一直是行业的佼佼者   自16世纪以来的标准虚拟文本。

     

我是TAB- Lorem Ipsum只是打印的虚拟文本

我的下面正则表达式选择了“我是一个标题:'和我是一个选项卡 - '

^\s*(?:\b[A-Z]+\b[\s]*)+(?:[:-])\s*$

请建议编辑以匹配“我是标题”#39;并且'我是一个标签'并且 忽略终结标记':'和' - '。

2 个答案:

答案 0 :(得分:4)

您可以使用

^\s*(?:\b[a-zA-Z]+\b\s*)+(?=[:-])

请参阅regex demo

正则表达式细分:

  • ^ - 字符串开头
  • \s* - 0个或更多空格
  • (?:\b[a-zA-Z]+\b\s*)+ - 1个或多个序列
    • \b - 字边界(冗余)
    • [a-zA-Z]+ - 一个或多个字母
    • \b\s* - 0个或更多空格。
  • (?=[:-]) - 需要:-在前一个子模式之后的前瞻

此处的要点是将[a-z]添加到[A-Z]范围,删除\s*$并将(?:...)非捕获组转为前瞻(不消耗)字符)。

答案 1 :(得分:0)

这里的@ stribizhev解决方案非常有魅力。

^\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}添加为

,告诉它超出有多少单词开始丢失相关信息,使上述表达更加智能化
^[\s]*(?:\b[a-zA-Z]+\b[\s]*){1,3}(?=[:-])