我有一个格式的python字符串
mystr = "hi.this(is?my*string+"
在这里,我需要获取被特殊字符或非字母字符包围的“is”的位置(即本例中的第二个“is”)。然而,使用
mystr.find('is')
如果 'is' 与不想要的 'this' 相关联,则将返回该位置。如何找到字符串中被非字母字符包围的子字符串的位置?使用 python 2.7
这里最好的选择是使用正则表达式。Python 有用于处理正则表达式的re
模块。
我们使用简单的搜索来找到 的位置"is"
:
>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr)
这会将第一个匹配项作为匹配对象返回。然后我们简单地使用MatchObject.start()
来获取起始位置:
>>> match.start(1)
8
编辑:提出了一个很好的观点,我们组成"is"
一个小组并匹配该小组以确保我们获得正确的位置。
正如评论中所指出的,这做出了一些假设。一个是被包围的意思是"is"
不能在字符串的开头或结尾,如果是这种情况,则需要不同的正则表达式,因为它只匹配被包围的字符串。
另一个是这将数字视为特殊字符-您说的是non-alphabetic,我认为它是指包含的数字。如果您不想计算数字,那么使用r"\b(is)\b"
是正确的解决方案。