EB2*_*127 4 python string algorithm substring
假设我们在 Python 中有一个字符串:
original_string = "TwasTheNightBeforeChristmasWhenAllThroughTheHouse"
Run Code Online (Sandbox Code Playgroud)
我们有兴趣找到子字符串的起始坐标substring ="ChristmasWhen"。这在 Python 中非常简单,即
>>> substring ="ChristmasWhen"
>>> original_string.find(substring)
18
Run Code Online (Sandbox Code Playgroud)
这检查出来
>>> "TwasTheNightBeforeChristmasWhenAllThroughTheHouse"[18]
'C'
Run Code Online (Sandbox Code Playgroud)
如果我们试图寻找一个不存在的字符串,find()将返回 -1。
这是我的问题:
我有一个子字符串,它保证来自原始字符串。但是,此子字符串中的字符已被随机替换为另一个字符。
如果子字符串具有'-'替换某些字母的随机字符,我如何通过算法找到子字符串的开始坐标(或至少检查是否可能)?
这是一个具体的例子:
original_string = "TwasTheNightBeforeChristmasWhenAllThroughTheHouse"
substring = '-hri-t-asW-en'
Run Code Online (Sandbox Code Playgroud)
自然,如果我尝试original_string.find('-hri-t-asW-en'),但有可能找到hri从 19 开始,因此使用前缀-,子字符串original_string.find('-hri-t-asW-en')必须是 18。
这通常是正则表达式的用途:查找模式。然后你可以尝试:
import re # use regexp
original_string = "TwasTheNightBeforeChristmasWhenAllThroughTheHouse"
r = re.compile(".hri.t.asW.en") # constructs the search machinery
res = r.search(original_string) # search
print (res.group(0)) # get results
Run Code Online (Sandbox Code Playgroud)
结果将是:
ChristmasWhen
Run Code Online (Sandbox Code Playgroud)
现在,如果您的输入(搜索字符串)必须使用“-”作为通配符,您可以将其转换为正确的正则表达式:
import re
original_string = "TwasTheNightBeforeChristmasWhenAllThroughTheHouse"
s = ".hri.t.asW.en" # supposedly inputed by user
s = s.replace('-','.') # translate to regexp syntax
r = re.compile(s)
res = r.search(original_string)
print (res.group(0))
Run Code Online (Sandbox Code Playgroud)