需要帮助:Python正则表达式

需要帮助:Python正则表达式,python,regex,Python,Regex,我正在编写一个正则表达式,它将解析下面的字符串,并在6.0秒时停止。这个数字,6.0s,也可以是一系列的数字,比如150,或者是小数点,比如12.35。“s”可以是任何字母。停车点是最重要的 这是我的正则表达式:[\s+\s]+[\d.\d]+[a-z]? 我的问题是我的正则表达式一直在通过6.0并一直复制虚线以“查看” 15+MM{NXTW FHR 3153 AB MABXT YT 197-17}APE 6.0s ----------------------------------------

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

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

我的问题是我的正则表达式一直在通过6.0并一直复制虚线以“查看”

15+MM{NXTW FHR 3153 AB MABXT YT 197-17}APE 6.0s
------------------------------------------------------------
©版权所有2012波士顿系列集团有限公司。保留所有权利。看见

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


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

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

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

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

如何将字符串拆分成新行,并与任意数字匹配(可选后跟小数、数字和字符):-

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)

您尚未指定有关
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)

唯一的假设是它前面有一些空白,这是我根据您的尝试猜出来的。

这对您有用吗?我使用了
re.search()
,因为它搜索整个字符串,而不是每行。阅读更多

#-*-编码:utf-8-*-
进口稀土
s='''
15+MM{NXTW FHR 3153 AB MABXT YT 197-17}APE 6.0s
------------------------------------------------------------
©版权所有2012波士顿系列集团有限公司。保留所有权利。看见
'''
m=重新搜索('.+\d+(?:\.\d+)[a-zA-Z]{1}',s)
如果m!=无:打印m.group(0)
输出:

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

你不能只使用
str.partition
?str.partition不起作用,因为我处理的是一个很长的文本文件。这正是我有争议的部分。这有点不清楚。你想要字符串
“15+MM…6.0s”
作为结果吗?是的,我想要从
15+MM到6.0s的所有内容
你为你的正则表达式启用了什么设置?@jtbandes:记住让小数部分可选
(?:\。\d+)
。在(@Mike)最近的编辑之后,如果您将
s
改为可选字符(
[a-z]?
),上述操作对您不起作用吗?它必须在
6.0s
处停止。非
6
import re

m = re.match(r'(.*?)\s+-----', s)
print m.group(1)
for line in opened_file:
    mat = re.search("^.*\s(-?\d+(?:\.\d+)?[a-zA-Z])$", line)
    if mat is not None:
        print mat.group(1)
# -*- 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