0

私は一般的に正規表現に慣れていませんが、%charに関する特別なルールを見つけることができませんでした。

私は次のことをします:

line = parseFileHandle.readline()
while 1:
    line = parseFileHandle.readline()
    if not line:
        break
    # test for string '%%?'
    match = re.match("%%?", line)
    if match:
        print (line)

%ただし、 charで始まる行はすべて出力されます。それは私が望んでいることではありません。

最後に、この形式のファイルに含まれているファイル名(myfile.tex)を確認したいと思います。

%%?  file: myfile.tex
4

5 に答える 5

5

問題はではありません%。それ?は特別な意味を持っています:それは2番目を%オプションにします。したがって、正規表現はとに一致%%%ます。

次の正規表現が機能するはずです。

match = re.match("%%[?]", line)

行の先頭で検索する場合は%%?、正規表現は必要ありません。以下は同じことを達成します:

if line.startswith("%%?"):
于 2013-01-06T10:06:40.130 に答える
4

.startswith()この場合、おそらく最良の機能です。ここでは正規表現は必要ありません。

また、少し奇妙な方法でファイルを読んでいるようです。通常の構文は次のとおりです。

with open('filename.txt', 'r') as handle:
    for line in handle:
        if line.startswith('%%?'):
            print(line)
于 2013-01-06T10:09:07.303 に答える
1

リストからファイル名を抽出するには、次のように正規表現を使用します。

exp = re.compile("^%%\?  file: ([^ \n]+)$")
with open('filename.txt', 'r') as myfile:
    for line in myfile:
        match = exp.match(line)
        if match:
            print(match.group(1))

他の人が指摘したように?、正規表現では特別な意味があるため、最初の試みで文字をエスケープする必要がありました。

于 2013-01-06T10:20:45.423 に答える
0
if line.startswith('%%?'):
   # do something

おそらくあなたが望むものです

于 2013-01-06T10:07:11.167 に答える
0

?in regex は量指定子であり、次のことを意味します。

? 前の要素と 0 回または 1 回一致します。

(文字エスケープ) または(文字グループ)?を使用する必要がある一致する文字の場合\?[?]

于 2013-01-06T10:26:21.260 に答える