我希望在此示例中使用regex(python)获取重复字符串:
man less
我测试了这种模式:
#txt1#txt2#txt3#txt4
但不能工作 谢谢
答案 0 :(得分:1)
模式末尾的延迟点模式.*?
始终与空字符串匹配,因为.*?
匹配尽可能少出现量化模式,因为它可以匹配0个字符,它匹配0个字符。
对于具有#
分隔值的字符串,您可以使用带有[^#]
量词的否定字符类*
:
import re
s = '#txt1#txt2#txt3#txt4'
print(re.findall(r"#([^#]*)", s))
# => ['txt1', 'txt2', 'txt3', 'txt4']
请参阅Python demo。
#([^#]*)
模式与#
匹配,然后匹配并捕获除#
以外的任何0+字符的第1组。 re.findall
查找模式的所有非重叠事件,并仅返回捕获到组1中的值。
注意:要确保结果中没有空值,您应该将*
量词替换为匹配 1的+
量词或更多事件。
在这种情况下,您应该选择分割方法。如果您只有一个硬编码分隔符,例如#|
,您只需要str.split()
:
s = '#|txt1#|txt2#|txt3#|txt4'
res = filter(None, s.split('#|'))
print(res)
# => ['txt1', 'txt2', 'txt3', 'txt4']
见another Python demo。请注意,filter(None, res)
会从res
删除所有空字符串。
如果您的分隔符未经过硬编码,则可以使用re.split
。