Python re.findall获得价值

时间:2016-02-06 22:08:23

标签: python regex

我有一个文本文件,其中包含相同格式的多行

Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx

我构建了此代码以获取Pre:

之后的值
x2 = (re.findall(r'Pre:(\d+)',s))

我对re模式不太熟悉,但如果它是+或空值(无值),则此代码不会获取值

是否有任何建议要使代码生成Pre:之前的值,直到下一个#没有空格?

4 个答案:

答案 0 :(得分:1)

这个模式怎么样?它将获得所有内容,直到下一个" #",但不会贪婪(?是什么)。

r"Pre:(.*?) #"

答案 1 :(得分:0)

您提供的示例效果很好:

NSDateFormat *oldFormatter = [[NSDateFormatter alloc] init];
oldFormatter.dateFormat = @"H:mm"; // The old format
NSDateFormat *newFormatter = [[NSDateFormatter alloc] init];
newFormatter.dateFormat = @"h:mma"; // The new format

NSString *timeFrom = @"10:00";
NSString *timeTo = @"18:00";

NSDate *dateFrom = [oldFormatter dateFromString:timeFrom];
NSString *newTimeFrom = [newFormatter stringFromDate:dateFrom];

NSDate *dateTo = [oldFormatter dateFromString:timeTo];
NSString *newTimeTo = [newFormatter stringFromDate:dateTo];

NSLog(@"old times: %@ - %@", timeFrom, timeTo):
NSLog(@"new times: %@ - %@", newTimeFrom, newTimeTo):

您可能需要为负数和小数添加>>> import re >>> s = 'Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx' >>> re.findall(r'Pre:(\d+)', s) ['00'] +/-的处理:.,

如果您需要匹配任何字符串(不仅仅是数字),您可能需要使用(-?[\d.,]+)

或者您可以完全避免使用regexp并按Pre:(.*?)\s*#分隔符分割行:

#

然后先按>>> s.split('#') ['Server:x.x.x ', ' U:100 ', ' P:100 ', ' Pre:00 ', ' Tel:xxxxxx'] 分割行:

:

答案 2 :(得分:0)

非正则表达式方法将涉及按#拆分,然后按:形成一个字典,这将使访问字符串部分变得简单易读:

>>> 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'

答案 3 :(得分:0)

x2 = (re.findall(r'Pre:(.*?) #',s))
Pre:(.*?) #
  

匹配字符串“Pre:”字面上“Pre:”匹配正则表达式   在下面并将其匹配捕获到反向引用号1«(。?)»
  匹配任何不是换行符的单个字符«。
?»         在零和无限次之间,尽可能少的时间,根据需要扩展(懒惰)«*?»   匹配字符串“#”   字面意思«#»