0

我想将 stringA与 regex进行比较R

A = u'Hi my friend, my name is Julio'
R = r'Hi\s+my\s+friend,\s+my\s+name\s+is([A-Za-z]+)'

这时候我可以很容易地知道语法是否好,这要归功于re.matchand re.search。现在我想研究匹配不起作用时A和B之间的差异。

我的第一个案例很简单。我将正则表达式替换为([A-Za-z]+)(.+)了解问题是否仅在正则表达式组匹配中。在这种情况下,我可以很容易地提出这个问题,即字符串语法对于为名称定义的组是好的期望。

现在,在第 1 步和第 2 步失败的情况下,我想制作一个类似的差异,HTML diff但使用正则表达式来确定正则表达式失败的位置。

我研究difflib了该find_longest_match函数,但似乎该函数仅适用于每个字符的字符,而不适用于子字符串。

您是否有任何想法/建议来识别基于正则表达式比较的差异并可能计算测量相似性的比率?

4

1 回答 1

0

您的问题并不是 100% 清楚您需要什么,因为答案将取决于一般情况的性质,而您只给出了一个示例。但是,假设您的回答是典型的,我有几个建议。

您的正则表达式大多只是文字字符串匹配,最后只有一点正则表达式。因此,如果您将字符串匹配与正则表达式匹配分开可能会有所帮助。就像是:

into = u'Hi my friend, my name is '
name_r = '([A-Za-z]+)'

if not test_string.startsWith(intro):
    return do_string_diff(test_string)

name = test_string.split(intro)[-1]
if not re.match(name_r, name):
    return do_re_diff(test_string)

return true

您可能会在 difflib 中找到一些可以进行所需字符串比较的东西,或者您可能必须自己动手。这取决于您的具体需求。

您可能会在这里找到一些有用的东西:https ://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison

或做谷歌搜索fuzzy string matchingLevenshtein distance

于 2014-10-07T18:09:50.310 回答