使用Python正则表达式检查key:value;关键词:价值;这根绳子的形状很好
我的Python程序处理由id:value组成的字符串;对,例如:使用Python正则表达式检查key:value;关键词:价值;这根绳子的形状很好,python,regex,Python,Regex,我的Python程序处理由id:value组成的字符串;对,例如: s = "1:name;2:another name;3:one last name;" id应始终是数字和最终的;是可选的。 我想实现一个正则表达式,它既可以检查字符串的格式是否正确,也可以为我进行拆分 我写道: >>> import re >>> r = re.compile(r'([0-9]+):([^:;]+)(?:;|$)*') 这似乎可以正确地进行拆分: >>>
s = "1:name;2:another name;3:one last name;"
id应始终是数字和最终的;是可选的。
我想实现一个正则表达式,它既可以检查字符串的格式是否正确,也可以为我进行拆分
我写道:
>>> import re
>>> r = re.compile(r'([0-9]+):([^:;]+)(?:;|$)*')
这似乎可以正确地进行拆分:
>>> dict(r.findall(s))
{'1': 'name', '3': 'one last name', '2': 'another name'}
问题是我还想使用正则表达式来捕获格式错误的字符串。有没有办法改变它,使下列操作失败
>>> r.match("1:name;dummy:another name;3:one last name;")
>>> r.match("1:name;a2:another name;3:one last name;")
谢谢!
Frank您可以使用不同的正则表达式执行匹配,该正则表达式包含$end of string,这将为您验证字符串
>>> validate = re.compile(r'(([0-9]+):([^:;]+)(?:;|$)*)*$')
>>> validate.match("1:name;2:another name;3:one last name;")
<_sre.SRE_Match object at 0x02B132A0>
>>> validate.match("1:name;dummy:another name;3:one last name;") # is None
>>> validate.match("1:name;a2:another name;3:one last name;") # is also None
>>validate=re.compile(r'([0-9]+):([^:;]+)(?:;|$)*)*$)
>>>validate.match(“1:名称;2:另一个名称;3:一个姓氏;”)
>>>validate.match(“1:name;dummy:other name;3:one last name;”)为无
>>>validate.match(“1:name;a2:other name;3:one last name;”)也是无
我想不出用match和findall对同一个正则表达式进行验证的方法。但是,我认为这样做也不是一个好主意
这里解释了为什么不能使用相同的正则表达式进行分组和验证:
您必须使用findall()
获取未知数量的组,使用MatchObject根本不起作用,因为它不会处理数量可变的组
因此,给定用于
findall()
函数的正则表达式R
,R
必须将字符串中的单个表达式与数量可变的表达式相匹配。但是对于match()
调用,没有类似的方法使用R
,因为R
只匹配字符串中变量数中的一个表达式,所以无法保证字符串其余部分的内容。坦白地说,我在这里不使用regex。我会使用听写理解
s = "1:name;2:another name;3:one last name;"
id_values = {k:v for entries in s.split(";") if entries for
k,v in [entries.split(":")] if k.isdigit()}
print(id_values)
# {'1': 'name', '3': 'one last name', '2': 'another name'}
s2 = "1:name;dummy:another name;3:one last name;"
id_values_2 = {k:v for entries in s2.split(";") if entries for
k,v in [entries.split(":")] if k.isdigit()}
print(id_values_2)
# {'1': 'name', '3': 'one last name'}
你混淆了
^
和$
和匹配
不需要^
:)啊,你是对的,匹配不需要^,但是你说我混淆了^和$是什么意思?^
是字符串的开始,$
是字符串的结束:)