需要帮助:Python正则表达式
我正在编写一个正则表达式,它将解析下面的字符串,并在6.0秒时停止。这个数字,6.0s,也可以是一系列的数字,比如150,或者是小数点,比如12.35。“s”可以是任何字母。停车点是最重要的 这是我的正则表达式:需要帮助: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 ----------------------------------------
[\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