Python re.findall获取值
我有一个文本文件,其中有多行在相同的以下模式Python re.findall获取值,python,regex,Python,Regex,我有一个文本文件,其中有多行在相同的以下模式 Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx 我构建此代码是为了在预处理后获得值: x2 = (re.findall(r'Pre:(\d+)',s)) 我不太熟悉re模式,但是如果它是+或空值(None值),那么这段代码就不会得到值 有没有建议泛化代码,以便在Pre:之后直到下一个#没有空格之前获得什么值?作为模式如何?它会在下一个“#”之前获得一切,但不会贪婪(这就是?的目的) 您提供的示
Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx
我构建此代码是为了在预处理后获得值:
x2 = (re.findall(r'Pre:(\d+)',s))
我不太熟悉re模式,但是如果它是+或空值(None值),那么这段代码就不会得到值
有没有建议泛化代码,以便在
Pre:
之后直到下一个#没有空格之前获得什么值?作为模式如何?它会在下一个“#”
之前获得一切,但不会贪婪(这就是?
的目的)
您提供的示例效果很好:
>>> import re
>>> s = 'Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx'
>>> re.findall(r'Pre:(\d+)', s)
['00']
您可能需要为负数和小数添加+/-
和,
处理:(?[\d,]+)
如果需要匹配任何字符串(不仅仅是数字),您可能需要使用Pre:(.*)\s*.
或者您可以完全避免使用regexp,并使用#
分隔符拆分行:
>>> s.split('#')
['Server:x.x.x ', ' U:100 ', ' P:100 ', ' Pre:00 ', ' Tel:xxxxxx']
然后先按:
拆分行:
>>> for row in s.split('#'):
... k, v = row.split(':', 1)
... print(k.strip(), '=', v.strip())
...
Server = x.x.x
U = 100
P = 100
Pre = 00
Tel = xxxxxx
非正则表达式方法包括通过#
进行拆分,然后通过:
形成一个字典,这将使访问字符串的各个部分变得简单易读:
>>> s = "Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx"
>>> d = dict([key.split(":") for key in s.split(" # ")])
>>> d["Pre"]
'00'
匹配字符串“Pre:”字面上的«Pre:»匹配正则表达式 并将其匹配捕获到反向参考编号1«(.?)»
匹配不是换行符的任何单个字符«.?» 在零次和无限次之间,尽可能少地按需扩展(惰性)«*?»
匹配字符串“#” 字面上是«#»
你只给我们展示了一个有效的例子。你应该给我们举一些不起作用的例子。你的“+或空值”到底是什么意思?
>>> s = "Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx"
>>> d = dict([key.split(":") for key in s.split(" # ")])
>>> d["Pre"]
'00'
x2 = (re.findall(r'Pre:(.*?) #',s))
Pre:(.*?) #