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
,但允许其后的任何操作。