我有一个文本文件,其中包含相同格式的多行
Server:x.x.x # U:100 # P:100 # Pre:00 # Tel:xxxxxx
我构建了此代码以获取Pre:
之后的值x2 = (re.findall(r'Pre:(\d+)',s))
我对re模式不太熟悉,但如果它是+或空值(无值),则此代码不会获取值
是否有任何建议要使代码生成Pre:
之前的值,直到下一个#没有空格?
答案 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«(。?)»
匹配任何不是换行符的单个字符«。?» 在零和无限次之间,尽可能少的时间,根据需要扩展(懒惰)«*?» 匹配字符串“#” 字面意思«#»