Python正则表达式部分匹配或;“hitEnd”;
我正在编写一个扫描器,因此我正在将任意字符串与正则表达式规则列表进行匹配。如果我能够模拟Java的“hitEnd”功能,不仅知道正则表达式何时不匹配,而且知道它何时不能匹配,这将非常有用;当正则表达式匹配器在确定输入被拒绝之前到达输入的末尾时,表示较长的输入可能满足规则 例如,我可能正在匹配html标记,以便开始加粗“”形式的句子。所以我编译了我的规则Python正则表达式部分匹配或;“hitEnd”;,python,regex,Python,Regex,我正在编写一个扫描器,因此我正在将任意字符串与正则表达式规则列表进行匹配。如果我能够模拟Java的“hitEnd”功能,不仅知道正则表达式何时不匹配,而且知道它何时不能匹配,这将非常有用;当正则表达式匹配器在确定输入被拒绝之前到达输入的末尾时,表示较长的输入可能满足规则 例如,我可能正在匹配html标记,以便开始加粗“”形式的句子。所以我编译了我的规则 bold_html_rule = re.compile("<b>") bold\u html\u rule=re.compile(
bold_html_rule = re.compile("<b>")
bold\u html\u rule=re.compile(“”)
我运行了一些测试:
good_match = bold_html_rule.match("<b>")
uncertain_match = bold_html_rule.match("<")
bad_match = bold_html_rule.match("goat")
good\u match=bold\u html\u rule.match(“”)
不确定的\u match=bold\u html\u rule.match(试试这个。它确实感觉像是一个黑客,但至少它确实达到了您想要的结果。尽管我有点担心PrepareCompileString
函数。它应该能够处理所有转义字符
,但不能处理任何通配符
import re
#Grouping every single character
def PrepareCompileString(regexString):
newstring = ''
escapeFlag = False
for char in regexString:
if escapeFlag:
char = escapeString+char
escapeFlag = False
escapeString = ''
if char == '\\':
escapeFlag = True
escapeString = char
if not escapeFlag:
newstring += '({})?'.format(char)
return newstring
def CheckMatch(match):
# counting the number of non matched groups
count = match.groups().count(None)
# If all groups matched - good match
# all groups did not match - bad match
# few groups matched - uncertain match
if count == 0:
print('Good Match:', match.string)
elif count < len(match.groups()):
print('Uncertain Match:', match.string)
elif count == len(match.groups()):
print('Bad Match:', match.string)
regexString = '<b>'
bold_html_rule = re.compile(PrepareCompileString(regexString))
good_match = bold_html_rule.match("<b>")
uncertain_match = bold_html_rule.match("<")
bad_match = bold_html_rule.match("goat")
for match in [good_match, uncertain_match, bad_match]:
CheckMatch(match)
重新导入
#将每个字符分组
def PrepareCompileString(正则表达式字符串):
新闻字符串=“”
escapeFlag=False
对于正则表达式字符串中的字符:
如果是escapeFlag:
字符=转义字符串+字符
escapeFlag=False
逃逸开支=“”
如果char='\\':
escapeFlag=True
转义字符串=字符
如果没有逃逸:
新闻字符串+='({})?'。格式(字符)
返回新闻字符串
def CheckMatch(匹配):
#计算不匹配组的数量
count=match.groups().count(无)
#如果所有组都匹配-匹配良好
#所有组都不匹配-不匹配
#少数组匹配-不确定匹配
如果计数=0:
打印('Good Match:',Match.string)
elif计数 不确定\u匹配=粗体\u html\u规则。匹配(“你看过正则表达式包中的partial属性了吗?我找不到,它在这里列出了吗?它看起来确实更强大,但我真的想知道是否有办法使用包含的模块。我意识到关于我编写自己的包的那一行有点矛盾,所以我只是编辑了它。我肯定会看一看如果内置模块不能做到这一点!我不太清楚为什么您不能创建条件/规则来处理这些不同的场景,包括“无”。也许可以提供更多代码,说明您尝试制作尽可能多的内容,以及为什么它不是您想要的?
Good Match: <b>
Uncertain Match: <
Bad Match: goat