Python-如何检查字符串是否包含通配符或正则表达式

Python-如何检查字符串是否包含通配符或正则表达式,python,regex,string,wildcard,Python,Regex,String,Wildcard,我有一个字段,应该是用户输入的regex;但是,有时用户会输入通配符。我想检查输入是否有通配符和拒绝。例如: 有效(仅包含正则表达式) s='abc1.*r.' s='abc1.*r' s='abc1.r' 无效(包含通配符) s='abc1r' s='abc1.*r*' 我试过re.findall: s = 'abc1.\*rr*.*' # String contains wildcard hence should be rejected a = len(re.findall('\.\*',

我有一个字段,应该是用户输入的
regex
;但是,有时用户会输入通配符。我想检查输入是否有通配符和拒绝。例如:

有效(仅包含正则表达式)

s='abc1.*r.'

s='abc1.*r'

s='abc1.r'

无效(包含通配符)

s='abc1r'

s='abc1.*r*'

我试过re.findall:

s = 'abc1.\*rr*.*' # String contains wildcard hence should be rejected
a = len(re.findall('\.\*', s))
b = len(re.findall('\*', s))
if a != b:
    print "reject"
基本上检查。*和*的数量是否相等。如果不是,这意味着有一个没有“.”的“*”


有更好、更干净的方法吗?

这可以用这个正则表达式完成:

[^.]\*
此正则表达式查找后跟
*
的非点字符。如果在任何地方匹配,则应拒绝正则表达式:

if re.search(r'[^.]\*', s):
    print("Rejected!")

但是
abc1*r*
也是一个有效的正则表达式,不是吗?没错,这个问题可以用更好的措辞。有一个函数将此正则表达式与用户的进一步输入相匹配。通常,“abc4*测试”应与“abc44test”匹配,但此函数在其上不匹配。这是一些我不太熟悉的Java东西,我无法改变这个函数的工作方式。所以,不是你想拒绝非正则表达式,你只是想拒绝字符串,如果至少有一个
*
在非点之后?是的,没错,请注意。问题似乎不仅仅是措辞不恰当-只是不清楚有效正则表达式是什么意思。正如@sweeper所说,
abc1*r*
是一个完全有效的正则表达式,它的意思与
abc1.*r*
完全不同。它允许重复
1
r
零次或多次,而第二次重复至少需要一次
1
r
,但允许其后的任何操作。