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