0

以下の文字列を解析し、正確に 6.0 秒で停止する正規表現を作成しています。この数値 6.0 は、150 のような一連の数字または 12.35 のような小数である可能性もあります。「s」は任意の文字です。ストップポイントが最も重要

これが私の正規表現です:[\S+\s]+[\d.\d]+[a-z]?

私の問題は、正規表現が 6.0 を通過し続け、破線を「参照」までずっとコピーしていることです。

15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s
------------------------------------------------------------
© Copyright 2012 The Boston Series Group, Inc. All rights reserved. See
4

5 に答える 5

1

文字列を改行で分割し、オプションで小数点、数字、および文字が続く数字までの任意のものと一致させる方法はどうですか:-

import re

s = '''15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s
------------------------------------------------------------
 Copyright 2012 The Boston Series Group, Inc. All rights reserved. See'''
m = re.match(r'.+\d+(\.\d+)?[a-z]?', s.split('\n')[0])
print m.group(0)

出力:-

C:\>python st.py
15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s

または、次のように言ってダッシュを区切り文字として使用することもできます:-

import re

m = re.match(r'(.*?)\s+-----', s)
print m.group(1)
于 2012-12-21T09:28:17.187 に答える
0

あなたの主な問題は、[]物事をグループ化するために使用していることです—これはキャラクタークラス(「これらのキャラクターのいずれか」の構成)です。代わりに、を使用することをお勧めします()

ただし、代わりに、次のようなものを試してください。^\S+\s.+\d+(?:\.\d+)?[a-z]?$^$行の開始と終了を表し、キャプチャグループはまったく必要ないようです。

于 2012-12-21T09:18:07.260 に答える
0

これは、一連の数字、文字、または で始まり+、その後に浮動小数点数が続く行に一致します。s

^[0-9A-Z+]+\s+.*\s+[0-9.]+s$

また、正規表現が複数行でないことを確認する必要があります。

于 2012-12-21T09:24:48.587 に答える
0

グループの前のテキストについて何も指定していない6.0sため、信頼できる正規表現部分を作成する合理的な方法はありません。明確に指定されているのは終わりだけです。そうは言っても、この例6.0sでは、仕様のようなもので終わるすべての行が出力されます。

for line in opened_file:
    mat = re.search("^.*\s(-?\d+(?:\.\d+)?[a-zA-Z])$", line)
    if mat is not None:
        print mat.group(1)

唯一の仮定は、あなたが試したことから推測した、その前に空白があるということです。

于 2012-12-21T09:28:47.307 に答える
0

これはうまくいきますか?re.search()行ごとではなく、文字列全体を検索するため、使用しました。詳細はこちらをご覧ください

# -*- coding: utf-8 -*-

import re

s = '''
15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s
------------------------------------------------------------
© Copyright 2012 The Boston Series Group, Inc. All rights reserved. See
'''

m = re.search('.+\d+(?:\.\d+)?[a-zA-Z]{1}', s)
if m != None: print m.group(0)

出力:

15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s
于 2012-12-24T16:09:48.323 に答える