2015-10-22 67 views
1

嘗試使用正則表達式來識別我的文本數據的結構並打中路障。用第一個大寫字母匹配單詞的正則表達式

對於低於

示範文本我是頭部:
Lorem存有簡直是印刷 和排版行業的虛擬文本。自從16世紀以來,Lorem Ipsum一直是業界的 標準虛擬文本。

我是製表符Lorem存有是印刷

我的只是虛擬的文本下面的正則表達式拿起「我是一個標頭:」和「我是一個製表符」

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

請建議編輯以匹配'我是標題'和'我是標籤',並且 也會忽略最終標記':'和' - '。

+1

['^ \ s *(?:\ b [a-zA-Z] + \ b \ s *)+(?= [: - ])'](https://regex101.com/r/uF9zU8/2)? –

+0

'^ \ s *(?:(?=。+ [: - ] \ s * $)(?:\ b [AZ] [az] * \ b [\ s] *)+)'應該可以工作 –

+0

使用正則表達式? ():myword [0] == myword [0] .upper()和myword [0] .isalpha():#做點什麼' –

回答

1

這裏是@ 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}(?=[:-]) 
作出上述表示聰明,告訴它超越你開始多少字丟失的相關信息10
+0

因爲量詞已經很貪婪,我認爲你不需要'{1,3}'後面的'+'。 Python不支持佔有量詞。 –

+0

@stribizhev:謝謝。編輯答案。 – WeShall

2

您可以使用

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

regex demo

正則表達式崩潰:

  • ^ - 字符串的開始
  • \s* - 0或多個空白
  • (?:\b[a-zA-Z]+\b\s*)+ - 的
    • \b 1或多個序列 - 字邊界(冗餘)
    • [a-zA-Z]+ - 1或多個字母
    • \b\s* - 0或多個空格。
  • (?=[:-]) - 需要:-是正確的前述子模式

要點這裏是增加後的[A-Z]範圍[a-z],除去\s*$和車削(?:...)非捕獲基團與先行前瞻(不會消耗字符)。

+0

我可以限制可以出現的單詞數結束標記之前?說1到4個單詞。怎麼樣 ? – WeShall

+0

不用擔心。得到它了。謝謝。 – WeShall

+0

是的,我想通過用'{n}'替換'+'來代替,其中'n'是數字。 「{2}」是一個限制量詞,它與前面的子模式恰好匹配2次。 –

相關問題