0

我正在编写一个正则表达式,它将解析下面的字符串并在 6.0 秒处准确停止。这个数字 6.0s 也可以是一系列数字,如 150 或小数,如 12.35。“s”可以是任何字母。停靠点最重要

这是我的正则表达式:[\S+\s]+[\d.\d]+[a-z]?

我的问题是我的正则表达式不断通过 6.0s 并将虚线一直复制到“查看”

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

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

您还应该确保您的正则表达式不是多行的。

于 2012-12-21T09:24:48.587 回答
0

Does this work for you? I used re.search() because it searches the entire string, not by each line. Read more here.

# -*- 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)

Output:

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

您的主要问题是您用于[]对事物进行分组-这是一个字符类(“任何这些字符”构造)。相反,你会想要使用().

但是,请尝试使用类似^\S+\s.+\d+(?:\.\d+)?[a-z]?$的东西——and 表示^一行$的开始和结束,听起来你根本不需要捕获组。

于 2012-12-21T09:18:07.260 回答
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 回答