需要帮助:Python Regex

时间:2012-12-21 09:05:48

标签: python regex

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

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

我的问题是我的正则表达式不断传递6.0并将虚线一直复制到“See”

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

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

但是,请尝试类似^\S+\s.+\d+(?:\.\d+)?[a-z]?$的内容 - ^$用于行的开头和结尾,听起来根本不需要捕获组

答案 2 :(得分:0)

这将匹配以一系列数字,字符或+开头的行,然后是一个浮动数字后跟s

的任何内容
^[0-9A-Z+]+\s+.*\s+[0-9.]+s$

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

答案 3 :(得分: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)

唯一的假设是前面有一些空白,我猜你已经尝试过了。

答案 4 :(得分:0)

这对你有用吗?我使用re.search()因为它搜索整个字符串,而不是每行。阅读更多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)

输出:

15+MM  {NXTW FHR 3153   AB  MABXT YT 197-17 <PA>} | APE 6                   6.0s