0

reモジュールを使用して正規表現識別の問題を解決しようとしています。*で始まる行をファイルからコピーしたいのですが、正確な行パターンは次のとおりです。

*7  3   279 0

キャラクターの中にはタブがあります。行と一致する私の正規表現は次のとおりです。

regex=re.compile(r'^\*\d+.\n', re.MULTILINE)
for line in f:
    if regexp.match(line)
    print >> a, line

私が書いたスクリプトはファイル「a」を作成しますが、それは空であり、パターンを認識できません。アドバイスはありますか?

また、二重引用符と一重引用符のパターンの違いを教えてください。いくつかのPythonマニュアルを検索しましたが、情報が見つかりませんでした。

4

4 に答える 4

2

正規表現を使用して行全体をキャプチャしているわけではありません。一致するのは次のタイプの行のみです。

*7

ファイルの各行^\*(?:\d+\s+)+$に正規表現を適用しているので、複数行は必要ありません。

編集:不要なため、非キャプチャグループに変更されました。

于 2013-02-14T17:00:32.100 に答える
1

行の先頭で+numberのみを探していると仮定すると*、これを行う必要があるのは次のとおりです。

regex=re.compile(r'\*\d+')
for line in f:
    if regexp.match(line)
    print >> a, line

スペースで区切られた数字の数を気にする場合:

regex=re.compile(r'\*(?:\d+\s+){3}\d+')
for line in f:
    if regexp.match(line)
    print >> a, line

使用する場合、アンカーre.matchは必要ありません。^を使用する場合は、使用re.searchします。ドキュメントを参照してください

于 2013-02-14T17:14:39.963 に答える
0

これを試してください:

 re.compile(r'^\*\d\s+\d+\s+')
于 2013-02-14T17:00:34.263 に答える
0

Pythonはわかりませんが、正規表現はこれであるようです^[*][\d(\s)*]+$

于 2013-02-14T17:01:50.630 に答える