尝试使用正则表达式识别我的文本数据的结构并点击路障。
下面的示例文本
我是一个标题:
Lorem Ipsum只是打印的虚拟文本 和排版行业。 Lorem Ipsum一直是行业的佼佼者 自16世纪以来的标准虚拟文本。我是TAB- Lorem Ipsum只是打印的虚拟文本
我的下面正则表达式选择了“我是一个标题:'和我是一个选项卡 - '
^\s*(?:\b[A-Z]+\b[\s]*)+(?:[:-])\s*$
请建议编辑以匹配“我是标题”#39;并且'我是一个标签'并且 忽略终结标记':'和' - '。
答案 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}(?=[:-])