【发布时间】:2010-09-21 03:49:50
【问题描述】:
我正在尝试区分两个字符串,以确定它们是否仅在字符串结构的一个数字子集中有所不同;例如,
varies_in_single_number_field('foo7bar', 'foo123bar')
# Returns True, because 7 != 123, and there's only one varying
# number region between the two strings.
在 Python 中,我可以使用 difflib 来完成此操作:
import difflib, doctest
def varies_in_single_number_field(str1, str2):
"""
A typical use case is as follows:
>>> varies_in_single_number_field('foo7bar00', 'foo123bar00')
True
Numerical variation in two dimensions is no good:
>>> varies_in_single_number_field('foo7bar00', 'foo123bar01')
False
Varying in a nonexistent field is okay:
>>> varies_in_single_number_field('foobar00', 'foo123bar00')
True
Identical strings don't *vary* in any number field:
>>> varies_in_single_number_field('foobar00', 'foobar00')
False
"""
in_differing_substring = False
passed_differing_substring = False # There should be only one.
differ = difflib.Differ()
for letter_diff in differ.compare(str1, str2):
letter = letter_diff[2:]
if letter_diff.startswith(('-', '+')):
if passed_differing_substring: # Already saw a varying field.
return False
in_differing_substring = True
if not letter.isdigit(): return False # Non-digit diff character.
elif in_differing_substring: # Diff character not found - end of diff.
in_differing_substring = False
passed_differing_substring = True
return passed_differing_substring # No variation if no diff was passed.
if __name__ == '__main__': doctest.testmod()
但我不知道如何为 C++ 找到类似 difflib 的东西。欢迎使用替代方法。 :)
【问题讨论】:
-
我只是想澄清一下,字母重要还是数字重要?在我看来,您希望每对数字系列,您只希望对有任何差异?
-
所有字符必须相同,除了一个“数字字符串位置”必须以数字变化。这更有意义吗?
-
所以基本上,您正在寻找 A1*B1 == A2B2 其中 * 是数字序列?
-
我认为这个描述并不完全正确......更像是:a =~ /(.*?)(\d*)(.*)/; b =~ /(.*?)(\d*)(.*)/ 其中至少有一个中心分组必须是非空的,数字的中心分组必须在数值上不相等,并且第一个和第三个分组必须相等。
-
好的,我想我差不多有了解决方案,再过 1 分钟 :)