2

Pythonを使用してjsファイルの複数行コメントの内容を取得したいと思います。

このコードサンプルを試しました

import re
code_m = """
/* This is a comment. */
"""
code_s = "/* This is a comment*/"

reg = re.compile("/\*(?P<contents>.*)\*/", re.DOTALL + re.M) 
matches_m = reg.match(code_m)
matches_s = reg.match(code_s)
print matches_s # Give a match object
print matches_m # Gives None

私はとして取得matches_mNoneます。しかし、matches_s動作します。ここで何が欠けていますか?

4

2 に答える 2

4

match()文字列の先頭でのみ一致しますsearch()。代わりに使用してください。

を使用すると、正規表現のmatch()先頭に文字列アンカー ( ) の暗黙的な開始があるようになります。\A

補足として、正規表現でorを使用していて、行の先頭と末尾で一致させたいre.M場合を除き、フラグは必要ありません。複数のフラグを組み合わせる場合は、追加する代わりにビットごとの OR (たとえば) を使用する必要もあります。^$re.S | re.M

于 2012-10-30T17:34:30.910 に答える
2

re.match文字列が正規表現に一致するかどうかをテストします。あなたはおそらく探しているre.search

>>> reg.search(code_m)
<_sre.SRE_Match object at 0x7f293e94d648>
>>> reg.search(code_m).groups()
(' This is a comment. ',)
于 2012-10-30T17:34:41.863 に答える