使用Python 2.7
假设我有一个模式字符串abb
和一个搜索字符串abab
。
我想得到模式字符串的切片部分,它尽可能从一开始就与搜索字符串匹配,也就是说,我希望表达式只返回ab
,因为只有那么多的模式字符串在搜索字符串的开头。我也读过google page on regex和正则表达式howto page,但找不到方法。只要一个提示就够了。你知道吗
我已经写了下面的代码给出了正确的答案,但我正在寻找更有效的东西。你知道吗
pat_str='abb'
search_str='abab'
pat_length=len(pat_str)
for each in xrange(pat_length,0,-1):
if re.search('^'+pat_str[:each],search_str):
return_str=pat_str[:each]
break
print return_str
编辑: 相应的元素应该相同。在对应元素不相同的第一个实例处中断并返回前面的字符串。你知道吗
我不确定您是否可以用正则表达式来实现这一点(不是以一种有意义的方式),但您不需要这样做;在适用于任意数量字符串的函数中实现它很简单:
您描述的正则表达式是
您可以根据您的模式动态构建它:
这是假设您真的想使用正则表达式。其他答案都有很好的解决方案,无需重新考虑。你知道吗
也可以在谷歌上搜索“最长的公共字符串前缀”。你知道吗
更新:regexp错误(有点颠倒),修复了它。你知道吗
考虑到你只想在一开始就找到一个匹配的,只需压缩,比较和返回。你知道吗
如果要在sub中查找任何匹配项:
输出:
相关问题 更多 >
编程相关推荐