2

正規表現で単一の空白をエスケープする必要がありますか? Python では次のいずれかの方法で動作することがわかっています: re.compile(r'\s')re.compile(r' ')およびre.compile(r'\ '). したがって、Python re モジュールを使用してエスケープするかどうかを選択できるようです。

しかし、ply.lex を介して単一の空白のルールを定義しようとしたとき、状況は少し異なるようです。

##########################
# r'\s' は ply.lex で動作します
def t_WHITESPACE(トークン):
  r'\s'
  合格

##########################
# r'\ ' も機能します
def t_WHITESPACE(トークン):
  r'\ '
  合格

##########################
# r' ' は機能しません
# 「ルール 't_WHITESPACE' の正規表現は空の文字列に一致します」というメッセージとともに SyntaxError が発生しました
def t_WHITESPACE(トークン):
  r' '
  合格

ply.lex は、ルールのドキュメント文字列で特別な処理を行いますか?

4

1 に答える 1

5

ply はわかりませんが、re.VERBOSEオプションを使用して正規表現をコンパイルしているように見えます。つまり、リテラルの空白をエスケープするか、\s.

また、ハッシュ ( ) をエスケープする必要があります。エスケープしないと#、次の部分がコメントとして解釈されます。

于 2012-04-25T08:20:09.793 に答える