亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python lex - 類型錯誤:未知文本

Python lex - 類型錯誤:未知文本

慕碼人8056858 2021-11-30 19:19:36
我正在嘗試編寫一個簡單的 lex 解析器。目前的應對方式是:from ply import lextokens = (      'COMMENT',      'OTHER'  )  t_COMMENT = r'^\#.*\n'  t_OTHER = r'^[^\#].*\n'  def t_error(t):      raise TypeError("Unknown text '%s'" % (t.value,))  lex.lex()lex.input(yaml)  for tok in iter(lex.token, None):      print repr(tok.type), repr(tok.value)但是無法解析簡單的輸入文件:    # This is a real comment    #And this one also    #/*    # *    # *Variable de feeu    # */    ma_var: True    It is done, over, kaput    具有以下輸出:l'COMMENT' '# This is a real comment\n'Traceback (most recent call last):  File "parser_adoc.py", line 62, in <module>    main2()  File "parser_adoc.py", line 57, in main2    for tok in iter(lex.token, None):  File "/usr/lib/python2.7/site-packages/ply/lex.py", line 384, in token    newtok = self.lexerrorf(tok)  File "parser_adoc.py", line 44, in t_error    raise TypeError("Unknown text '%s'" % (t.value,))TypeError: Unknown text '#And this one also#/*# *# *Variable de feeu# */ma_var: Truethis is done'總之,我定義了 2 個正則表達式:一個以開頭的行 #一個用于不以開頭的行 #但它不起作用。我不明白我的正則表達式有什么問題。你能幫忙嗎?
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

在 python 正則表達式(PLY 使用的)中,^指的是字符串的開頭,而不是行的開頭,除非已設置多行模式。因此,由于您的兩個規則都以 開頭^,因此它們只能在第一行匹配。

您可以通過將正則表達式包裝在 中來解決此問題(?m:...),這將啟用多行模式,但這在這里甚至沒有必要。相反,您可以^從規則的開頭刪除,它會按您的意愿工作。由于您的兩個規則始終與整行匹配,因此下一個標記將始終從該行的開頭開始 - 無需錨定它們。


查看完整回答
反對 回復 2021-11-30
  • 1 回答
  • 0 關注
  • 250 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號