我有類似下面的文本:蟒蛇正則表達式的mediawiki段解析
==Mainsection1==
Some text here
===Subsection1.1===
Other text here
==Mainsection2==
Text goes here
===Subsecttion2.1===
Other text goes here.
在上面的文字的主區1和2有不同的名稱,可以是用戶想要的一切。小節也一樣。
我想要做的正則表達式是獲取mainsection的文本,包括其子節(如果有的話)。 是的,這是從wikipage。所有mainsections名稱均以==
開頭並以==
結尾。所有子部分的名稱均大於2==
。
regex =re.compile('==(.*)==([^=]*)', re.MULTILINE)
regex.findall(text)
但是,上述返回每個單獨的部分。 這意味着它完美地返回一個主要部分,但看到他自己的一個小節。
我希望有人能幫助我這個作爲它的被竊聽我一些時間
編輯: 結果應該是:
[('Mainsection1', 'Some text here\n===Subsection1.1===
Other text here\n'), ('Mainsection2', 'Text goes here\n===Subsecttion2.1===
Other text goes here.\n')]
編輯2:
我已經重寫我的代碼不使用正則表達式。我得出的結論是,我自己解析它很容易。這使我對它更具可讀性。
因此,這裏是我的代碼:
def createTokensFromText(text):
sections = []
cur_section = None
cur_lines = []
for line in text.split('\n'):
line = line.strip()
if line.startswith('==') and not line.startswith('==='):
if cur_section:
sections.append((cur_section, '\n'.join(cur_lines)))
cur_lines = []
cur_section = line
continue
if cur_section:
cur_lines.append(line)
if cur_section:
sections.append((cur_section, '\n'.join(cur_lines)))
return sections
感謝大家的幫助!
所有提供的答案幫助了我很多!
也許你會更好使用預先存在的wikimedia標記分析器?乍一看,https://secure.wikimedia.org/wikipedia/mediawiki/wiki/Alternative_parsers,mwlib看起來最有前途。 – slowdog
這對Regex來說不是一件好事。你最好使用真正的解析器(比如PLY或PyParsing),或者更好一些:其他人已經編寫過的庫。 – jathanism
這對於Regex來說可能不是很好,但它肯定是可行的 - 問題是您的特定語法與任何可用的wiki解析器有多接近 - 以及您偏離「標準」或至少受歡迎的原因語法 –