我试图从这样的字符串中获取一个或多个子字符串:
“表1:顺1:顺2:顺N:尾”
或
“param1:顺服1:结束”
或由":“分隔并由"theSTART:”和":theEND“分隔的任意数量的参数。我使用的是Python3正则表达式,但找不到合适的模式来匹配可变数量的项:
r"theSTART:((?:\w*)+):((?:[^:])*):((?:\w)+):theEND"只适用于3项。如果我试着:
r"theSTART:((?:\w*)+):(((?:[^:])*):)+((?:\w)+):theEND"不像预期的那样起作用。
发布于 2017-11-06 21:10:38
如果您想使用正则表达式而不是拆分,re.findall可能是一个解决方案。findall返回一个模式的所有出现的列表。
re.findall(r":(?:(\w+)(?=:))", r"theSTART:param1:param2:paramN:theEND")返回列表['param1', 'param2', 'paramN']。
您可能找不到(或不能)匹配任意数量的参数的模式。根据Python,如果一个组多次匹配,那么关于模块文档只是最后一个可访问的匹配。
发布于 2017-11-06 00:39:26
那么,如果您的数据总是以'theStart‘开头,以'theEnd’结尾,并且所有字段都是分隔的,那么为什么还要为这个问题愚蠢地使用正则表达式呢?为什么不只是:
def delimited_items(the_string):
items = the_string.split(':')
return items[1:-1]发布于 2017-11-06 20:27:05
使用“.”捕获所有内容。然后在分隔符上拆分应该会简化一些事情。
params = re.match(r'theSTART:(.+):theEND', a).group(1).split(':')https://stackoverflow.com/questions/47128060
复制相似问题