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:(.*?) #