2011-03-12 15 views
2

CODE:Python的正則表達式的子空間

word = 'aiuhsdjfööäö ; sdfdfd' 
word1=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]',"""\[^^0-9\t\r\n\f(!){$}.+?|\]*""", word) ; print 'word= ', word 
word2=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]',"""\[^^0-9\\t\\r\\n\\f(!){$}.+?|\]*""", word) ; print 'word= ', word 
word3=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]',"""\[^^0-9\\\t\\\r\\\n\\\f(!){$}.+?|\]*""", word) ; print 'word= ', word 
word4=re.sub('[^^äÄöÖåÅA-Za-z0-9\s()!{$}.+?|]',"""\[^^0-9\s(!){$}.+?|\]*""", word) ; print 'word= ', word 
word5=re.sub('[^^äÄöÖåÅA-Za-z0-9\s()!{$}.+?|]',"""\[^^0-9\\s(!){$}.+?|\]*""", word) ; print 'word= ', word 
word6=re.sub('[^^äÄöÖåÅA-Za-z0-9\s()!{$}.+?|]',"""\[^^0-9\\\s(!){$}.+?|\]*""", word) ; print 'word= ', word 

F=open('suoriP.txt','w') 
F.writelines(word1+'\n\n'+word2+'\n\n'+word3+'\n\n'+word4+'\n\n'+word5+'\n\n'+word6) 
F.close 

結果:

aiuhsdjfööäö\[^^0-9 

(!){$}.+?|\]*\[^^0-9  

(!){$}.+?|\]*\[^^0-9  

(!){$}.+?|\]*sdfdfd 

aiuhsdjfööäö\[^^0-9 

(!){$}.+?|\]*\[^^0-9  

(!){$}.+?|\]*\[^^0-9  

(!){$}.+?|\]*sdfdfd 

aiuhsdjfööäö\[^^0-9\ \ 
\ 
\(!){$}.+?|\]*\[^^0-9\ \ 
\ 
\(!){$}.+?|\]*\[^^0-9\ \ 
\ 
\(!){$}.+?|\]*sdfdfd 

aiuhsdjfööäö \[^^0-9\s(!){$}.+?|\]* sdfdfd 

aiuhsdjfööäö \[^^0-9\s(!){$}.+?|\]* sdfdfd 

aiuhsdjfööäö \[^^0-9\s(!){$}.+?|\]* sdfdfd 

問題:

我不明白爲什麼:

  1. 重新不能替代反斜槓,\ S,\ S,\\ s的所有取代的\ S

  2. 重新不能替代\\噸\\ř\\ñ\\ f表示 ';'

我想通過分析文件來生成變量名稱的複雜重新模式。我不能生成空格字符表示[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]。我的意思是如果我在文本文件中找到';'與word1=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]',....

我不能替代這個字符';'字符串'[^^äääÖåÅA-Za-z0-9 \ t \ r \ n \ f()!{$}。+?|]'

此字符串是一個模式字符串,我在re.search提取某些單詞作爲變量。

解決方案 <哪裏出現了問題,以後又增加了。

最後我換成了xxxx而不是空格特殊字符。稍後通過添加'\ t \ n \ f \ v \ r'合併,拆分和合並字符串。

strsub=smart_str('[^^äÄöÖåÅA-Za-z0-9xxxx()!{$}.+?|`\"£$\%&_+~#\'@><]+', encoding='utf-8', strings_only=False, errors='replace') 
word=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\n\r\f()!{$}.+?|£$\%&_+~#\'@><]+',strsub,word) 

for line in word.split('xxxx'): 
    str2=str2+'\\t\\n\\f\\v\\r'+line 
    F.writelines(str2) 
+8

使用原始字符串的第二部分的正則表達式('r'str''代替''str''),所以反斜槓不會有特殊的含義(python-wise) – ThiefMaster 2011-03-12 09:15:45

+0

感謝您的答案。儘管如此,這對我來說還是不夠的。 line1被替換爲';'通常情況下,line2有奇怪的字符。是什麼原因? line1 = \ [^^äÄöÖåÅA-Za-z0-9 \(\)!{$}。+?|'\「£$ \%&_ +〜#\'@><] + line2 ='\\ t \ \ n \\ f \\ r \\ v' – gintare 2011-03-12 16:01:44

+1

請修改原始文章以添加此附加信息,而不是使用評論。 – 2011-03-12 21:15:39

回答

0

當您使用re.sub第二部分將不會是正則表達式 - 你應該簡單地集團,並調用它\1\2例如:

word="aiuhsdjfööäö" 
word1=re.sub("(.+?)[äa](.+?)","\1a\2 [corrected]",word) 

我上面所做的是完全沒有必要的但我這樣做是爲了表明我的觀點,使用[沒有來\後,當你使用它的re.sub