Python正则表达式子空间

时间:2011-03-12 09:13:35

标签: python regex whitespace

CODE:

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. re不替换反斜杠,\ s,\ s,\\ s全部替换为\ s

  2. 不能替换\\ t \\ r \\ n \\ f代表';'

  3. 我试图通过分析文件来生成带有变量名称的复杂re模式。

    我无法生成空格字符表示[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]。我的意思是如果我在文本文件中找到';'与word1=re.sub('[^^äÄöÖåÅA-Za-z0-9\t\r\n\f()!{$}.+?|]',....

    我无法替换这个角色';' by string'[^^äÄöÖåÅ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)
    

1 个答案:

答案 0 :(得分:0)

当您使用re.sub时,第二部分将不是正则表达式 - 您只需将其分组并在\1\2中调用它,例如:

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

我上面所做的完全没有必要,但我这样做是为了表明我的观点,当[使用\作为{{1}的第二部分时,不必使用re.sub }