Python正则表达式部分匹配或;“hitEnd”;

Python正则表达式部分匹配或;“hitEnd”;,python,regex,Python,Regex,我正在编写一个扫描器,因此我正在将任意字符串与正则表达式规则列表进行匹配。如果我能够模拟Java的“hitEnd”功能,不仅知道正则表达式何时不匹配,而且知道它何时不能匹配,这将非常有用;当正则表达式匹配器在确定输入被拒绝之前到达输入的末尾时,表示较长的输入可能满足规则 例如,我可能正在匹配html标记,以便开始加粗“”形式的句子。所以我编译了我的规则 bold_html_rule = re.compile("<b>") bold\u html\u rule=re.compile(

我正在编写一个扫描器,因此我正在将任意字符串与正则表达式规则列表进行匹配。如果我能够模拟Java的“hitEnd”功能,不仅知道正则表达式何时不匹配,而且知道它何时不能匹配,这将非常有用;当正则表达式匹配器在确定输入被拒绝之前到达输入的末尾时,表示较长的输入可能满足规则

例如,我可能正在匹配html标记,以便开始加粗“”形式的句子。所以我编译了我的规则

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