我正在编写一个正则表达式,它将解析下面的字符串并完全停止在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
答案 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