1

次の文字列形式に一致する正規表現を作成するための助けが欲しいです:

typedef enum x
{
    ...
} z;

指定されていなくても、x と z の値を取得したい場所。

ありがとう!

4

1 に答える 1

2
import re
str_typedef = """typedef enum x
{
    ...
} z;"""
pattern = 'typedef\s+enum\s+([a-zA-Z0-9_]+)\s*{[^{}]*}\s*([a-zA-Z0-9_]+)\s*;'
rs = re.findall(pattern, str_typedef)
for r in rs:
    enum_type_name = r.group(1)
    enum_name = r.group(2)
    # do operations with results here, or store to an array 
    # of dictionaries for use later.

ここでenum_type_nameは、「x」または x の代わりにある他の名前になり、enum_name「z」または z の代わりにある他の名前になります。

式の簡単な要約:

それぞれ\s+が 1 つ以上のスペースまたは改行であり、それぞれ\s*同じですが、空白はオプションになっています。

それぞれ([a-zA-Z0-9_]+)が、c++ 変数/クラス/列挙名の 1 つ以上の英数字のグループをキャッチして保存します。

{[^{}]*}は、 の後にまたは{以外の任意の数の文字が続き、その後に. が続くことを意味します。{}}

于 2013-11-12T03:40:40.117 に答える