使用正则表达式获取python中的重复字符串

使用正则表达式获取python中的重复字符串,python,regex,Python,Regex,在这个例子中,我想用正则表达式(python)得到一个重复的字符串: 我用这种模式进行了测试: \#(.*?) 但是不要工作 谢谢在模式末尾的惰性点模式*?总是匹配空字符串,因为*?匹配的量化模式的出现次数尽可能少,并且因为它可以匹配0个字符,所以它匹配0个字符 单字符场景 对于具有分隔值的字符串,您可以使用带*量词的否定字符类[^#]: import re s = '#txt1#txt2#txt3#txt4' print(re.findall(r"#([^#]*)", s

在这个例子中,我想用正则表达式(python)得到一个重复的字符串:

我用这种模式进行了测试:

\#(.*?)
但是不要工作
谢谢

在模式末尾的惰性点模式
*?
总是匹配空字符串,因为
*?
匹配的量化模式的出现次数尽可能少,并且因为它可以匹配0个字符,所以它匹配0个字符

单字符场景 对于具有
分隔值的字符串,您可以使用带
*
量词的否定字符类
[^#]

import re
s = '#txt1#txt2#txt3#txt4'
print(re.findall(r"#([^#]*)", s))
# => ['txt1', 'txt2', 'txt3', 'txt4']

模式匹配一个
#
,然后匹配并捕获组1中除
#
以外的任何0+字符
re.findall
查找模式的所有非重叠出现,并仅返回捕获到组1中的值

注意:为确保结果中不会出现空值,应将
*
量词替换为与一个或多个匹配的
+
量词

多字符分隔符 在这种情况下,您应该选择一种拆分方法。如果您只有一个硬编码分隔符,如
|
,则只需
str.split()

看。请注意,
filter(None,res)
将从
res
中删除所有空字符串


如果您有一个非硬编码的分隔符,您可以使用
re.split

预期的输出是什么?txt1、txt2、txt3、txt4don’我不觉得您在这里需要正则表达式:
“#txt1#txt2#txt3#txt4”。strip(#”).split(#split(##)
@Chris:,可能存在如下情况:
text0#text1#text2
text0
不是结果中的预期值。或者是更大的正则表达式模式的一部分。请发布一个代码示例。可能更短:
'[^#]+'
是的,这就是我添加的内容。但这实际上并不清楚,OP是否想要匹配这些空字符串。@RohanAmrute对于这种情况,是的。在OP中,只有一个输入字符串和一个模式,该模式似乎被设计为匹配
之后的任何文本。在这种情况下,使用否定字符类似乎是合理的。还有其他可能的方法来匹配它,使用
#
拆分也会在这里起作用,但我将重点关注原始正则表达式不起作用的原因,并解释正则表达式的解决方法。如果文本是这样的“#txt1#txt2#txt3#txt4”和txt1,txt2。。。可以包含#或|我不能使用否定字符,(谢谢)@RguezYasser:那么规则是什么呢?你如何用语言解释你需要的模式?是否要在符号之间获取子字符串?
import re
s = '#txt1#txt2#txt3#txt4'
print(re.findall(r"#([^#]*)", s))
# => ['txt1', 'txt2', 'txt3', 'txt4']
s = '#|txt1#|txt2#|txt3#|txt4'
res = filter(None, s.split('#|'))
print(res)
# => ['txt1', 'txt2', 'txt3', 'txt4']