Подпространство регулярных выражений Python - PullRequest
2 голосов
/ 12 марта 2011

КОД:

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. re не заменяет \\ t \\ r \\ n \\ 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 для извлечения определенных слов в качестве переменных.

РЕШЕНИЕ <, КОТОРОЕ ОСТАВЛЕНО ПОЗЖЕ И ДОБАВЛЕНО ПОЗЖЕ. </p>

В итоге я заменил 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 голосов
/ 18 июля 2013

Когда вы используете re.sub, вторая часть не будет регулярным выражением - вы просто должны сгруппировать ее и назвать в \1 или \2, например:

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

То, что я сделал выше, совершенно не нужно, но я сделал это, чтобы показать, что использование [ не обязательно должно идти после \, когда вы используете его как вторую часть re.sub

...