2024-04-25 13:49:10 发布
网友
在这个例子中,我想用regex(python)得到一个重复的字符串:
#txt1#txt2#txt3#txt4
我测试了这个模式:
\#(.*?)
但是不要工作 谢谢
模式末尾的延迟点模式.*?总是匹配空字符串,因为.*?匹配的量化模式的出现次数尽可能少,而且因为它可以匹配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中的值。你知道吗
re.findall
注意:为了确保结果中没有空值,您应该将*量词替换为+一个匹配一个或多个出现次数的量词。你知道吗
+
在这种情况下,您应该选择拆分方法。如果您只有一个硬编码的分隔符,比如#|,那么您只需要str.split():
#|
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中删除所有空字符串。你知道吗
filter(None, res)
res
如果您的分隔符不是硬编码的,那么可以使用re.split。你知道吗
re.split
模式末尾的延迟点模式
.*?
总是匹配空字符串,因为.*?
匹配的量化模式的出现次数尽可能少,而且因为它可以匹配0个字符,所以它匹配0个字符。你知道吗单字符场景
对于具有
#
分隔值的字符串,可以使用带*
量词的否定字符类[^#]
:参见Python demo。你知道吗
^{} 模式匹配
#
,然后匹配#
以外的任何0+字符并将其捕获到组1中。re.findall
查找模式中所有不重叠的匹配项,并仅返回捕获到组1中的值。你知道吗注意:为了确保结果中没有空值,您应该将
*
量词替换为+
一个匹配一个或多个出现次数的量词。你知道吗多字符分隔符
在这种情况下,您应该选择拆分方法。如果您只有一个硬编码的分隔符,比如
#|
,那么您只需要str.split()
:见another Python demo。请注意,
filter(None, res)
将从res
中删除所有空字符串。你知道吗如果您的分隔符不是硬编码的,那么可以使用
re.split
。你知道吗相关问题 更多 >
编程相关推荐