2012-08-01 62 views
0

我正在使用正則表達式來匹配關鍵字。是否可以在前25個字符內檢查此關鍵字?REGEX檢查前25個字符內的短語

例如,我想找到"APPLE"

'Johnny picked an APPLE from the tree' - 找到匹配(第25個字符以內)

'Johnny picked something from a tree that had an APPLE' - 未找到(因爲蘋果不在前25個字符之內存在)。

這是否有語法?

+4

你就不能對前25個字符運行正則表達式? Python中是什麼,'[:25]'? – Naltharial 2012-08-01 07:52:50

回答

7

一個簡單的解決方案是將slice關閉25個第一個字符,然後進行正則表達式匹配。

myString = 'Johnny picked an APPLE from the tree' 
slicedString = myString[:25] 
# do regex matching on slicedString 
+1

有時最簡單的是最好的(IMO) – 2012-08-01 07:55:46

+0

@GarethDavis它**是最好的,應該有一種方法來做到這一點! – jamylak 2012-08-01 08:10:58

2

是的。您在關鍵字前面添加0到25個字符(關鍵字)的「任意」字符。

我不確定這是否是實際的Python語法,但RE應該是^.{0,20}APPLE

編輯:澄清

  • ^.{0,20}APPLE應該尋找一個字符串時使用。在Python中使用它。
  • .{0,20}APPLE.*匹配整個字符串時應該使用。

另一個編輯:顯然Python只有substring模式,所以^錨是必要的。

+0

如果你正在做're.search',你想要'^',如果做're.match'則不需要。在任何情況下,尾隨'。*'不是必需的,除非由於某種原因想要匹配其餘行。 – Dougal 2012-08-01 07:55:53

+1

這是行不通的。你不能在正則表達式中檢查匹配部分的長度。你寫的只是:*從0到20任意符號* – 2012-08-01 07:57:42

+1

我寫的是0到20之間的任何符號,後跟5個字母的關鍵字。這與前25個字符中的任何位置的關鍵字相同。 (也許你錯過了更新;起初我沒有正確地錨定表達式(^ xxx)或(xxx。*))。 – user1252434 2012-08-01 07:59:20

1

嘗試使用你的字符串slice

>>> import re 
>>> string1 = "Johnny picked an APPLE from the tree" 
>>> string2 = "Johnny picked something from a tree that had an APPLE" 
>>> re.match(".*APPLE.*", string1[:25]) # Match 
<_sre.SRE_Match object at 0x2364030> 
>>> re.match(".*APPLE.*", string2[:25]) # Does not match 
+1

當你在'APPLE''上尋找匹配時,我看不到需要開始和結尾的'。*' – jamylak 2012-08-01 08:14:02

+0

re.match('APPLE',...)只有在單詞APPLE在字符串的開頭; re.match('。* APPLE',...)將起作用。實際上,更好的方法是使用re.search()而不是re.match()。 - REF:http://docs.python.org/library/re.html#search-vs-match – FLOZz 2012-08-04 19:59:39

+0

ahh是的,當然使用're.search' – jamylak 2012-08-05 00:27:27