2012-02-07 79 views
0

感謝這裏的一些最優秀的成員的幫助,我學到了很多關於正則表達式的知識,並且有了這個半工作。我需要添加字符:「,():; - 。?」到我的正則表達式搜索。問題是我傳入輸入搜索字符串的正則表達式,並不知道如何得到這個工作。驗證碼:Python正則表達式輸入搜索字符串的特殊字符

text = open_file.read() 

grammarList = raw_input("Enter your grammar string: "); 
tags = grammarList.split("^") 
tags_pattern = r"\b" + r"\s+".join(r"(\w+)/{0}".format(tag) for tag in tags) + r"\b" 
# gives you r"\b(\w+)/NNP\s+(\w+)/CC\s+(\w+)/NNP\b" 

from re import findall 
start_position = 0 

for poem in poemList: 
    start_position = text.find('<' + poem + '>', start_position) 
    end_position = text.find('</' + poem + '>', start_position) 

    searchtext = text [start_position:end_position] 
    poemname = poem 
    for oldname, newname in poemtitleswapList.items(): 
     poemname = poemname.replace(oldname, newname) 
    print poemname 
    print(findall(tags_pattern, searchtext)) 
    print "\n" 

這裏是文本文件的樣本:

To/TO 
emotion/NN 
for/IN 
all/DT 
there/EX 
is/VBZ 
in/IN 
it/PRP 
,/, 

它的偉大工程的一切,但逗號,圓括弧,句號,分號,問號,冒號,破折號和引號,我需要它能夠找到這些東西。任何幫助將不勝感激。

+0

使用XML解析器從文本,而不是'text.find'提取'searchtext'如果'文本「包含XML。 – jfs 2012-02-07 14:12:17

+0

謝謝sebastion,我應該更具體。我仍然在學習我道歉。它搜索正斜槓右側的大寫字母或符號。因此,如果我輸入NN^IN^DT,它將匹配斜槓右側文本文件中順序出現的所有時間。我需要能夠包含這些其他類型的字符,所以我可以運行搜索VBZ^IN^PRP ^, – 2012-02-07 14:18:24

回答

0

您可以使用re.escape(tag)來轉義在正則表達式中具有特殊含義的字符。爲了讓左非單詞字符,你可以通過[^/]+/取代\w+/

pattern = r'\s+'.join(r"^([^/]+)/{0}".format(re.escape(tag)) for tag in tags) 
print re.findall(pattern, searchtext, re.M) 

Output

[('is', 'in', 'it', ',')] 
+0

感謝您的幫助,但這是行不通的。它輸出瘋狂的字符串。我正在搜索斜線右側標記的未定長度,並且它應該返回右側相應的單詞。如果我輸入TO^NN^IN,它將搜索一個巨大的文本文件,並在每次找到該序列中的3個標籤時返回,然後返回標籤左側的每個相應單詞。它現在工作,但不會返回標點符號。 – 2012-02-07 15:25:31

+0

@English Grad:確實有用。點擊[上述鏈接](http://ideone.com/5BTvI)。你可以嘗試一下你的示例(點擊ideone頁面上的'用新輸入上傳')。 – jfs 2012-02-07 15:31:16

+0

@英語Grad:第一行應該是一個語法字符串,參見[#4輸出](http://ideone.com/5BTvI#li_4BLWj)。 – jfs 2012-02-07 16:55:05

相關問題