[英]Need to Escape the Character After Special Characters in Python's regex?
我有以下python代碼:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
line = 'div><div class="fieldRow jr_name"><div class="fieldLabel">name<'
regex0 = re.compile('(.+?)\v class="fieldLabel">name.+?', re.VERBOSE | re.UNICODE)
regex1 = re.compile('(.+?)v class="fieldLabel">name.+?', re.VERBOSE | re.UNICODE)
regex2 = re.compile('(.+?) class="fieldLabel">name.+?', re.VERBOSE | re.UNICODE)
m0 = regex0.match(line)
m1 = regex1.match(line)
m2 = regex2.match(line)
if m0:
print 'regex0 is good'
else:
print 'regex0 is no good'
if m1:
print 'regex1 is good'
else:
print 'regex1 is no good'
if m2:
print 'regex2 is good'
else:
print 'regex2 is no good'
輸出是
regex0 is good
regex1 is no good
regex2 is good
我不太明白為什么我需要在regex0中的“(。+?)”之后轉義字符'v'。 如果我沒有逃脫,這將成為regex1,那么匹配將失敗。 但是,對於regex3中“(。+?)”之后的空格,我不必逃避。
任何想法?
提前致謝。
因此,您的方法存在一些問題導致您的具體投訴的問題包括:
r'
前綴) - 這使得Python編譯器在它們甚至到達re.match調用之前更改了字符串中的一些“\\”前綴字符。 所以,你有匹配regex0:字母“v”os似乎從來沒有這樣。
現在,對於您可能的修復方法,按照您應該嘗試執行的順序:
1)不要使用正則表達式來解析HTML。 真。 有很多軟件包可以很好地解析HTML,缺少那些可以使用stdlib自己的HTMLParser
( html.parser
中的html.parser);
2)如果可能的話,使用Python 3而不是Python 2 - 如果繼續將Python2字符串視為“真實生活”文本的天真方法,那么您將被咬到HTML體內的第一個非ASCII字符。 Python 3自動編碼處理(當它不是自動時允許顯式設置)。
因為你可能沒有改變,所以嘗試使用regex.findall
而不是regex.match
- 這會返回一個匹配字符串的列表,並且可以檢索你正在查看的屬性,而無需從文件的開始搜索,或者依賴於在HTML中的換行符。
Python regex \\ v中有一個特殊的符號,你可以在這里閱讀: https : //docs.python.org/2/library/re.html
Python正則表達式通常用r'your regex'
塊編寫,其中“r”表示原始字符串。 ( https://docs.python.org/3/reference/lexical_analysis.html )
在您的代碼中,所有特殊字符都應該被轉義為普通字符。 例如,如果你寫s - 這是空格,\\ s只是“s”。 為了使它以相反的方式工作,使用原始字符串。 我相信下面這一行是您需要的解決方案。
regex1 = re.compile(r'(.+?)v class="fieldLabel">name.+?', re.VERBOSE | re.UNICODE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.