找到字符串中子字符串的位置

时间:2012-05-13 13:37:24

标签: python string find position

我有一个格式为python的字符串

mystr = "hi.this(is?my*string+"

这里我需要获得被特殊字符或非字母字符包围的'is'的位置(即本例中的第二个'是')。但是,使用

mystr.find('is')
如果'is'与'this'相关联,那么

将返回该位置,这是不希望的。如何找到字符串中非字母字符包围的子字符串的位置?使用python 2.7

1 个答案:

答案 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"是正确的解决方案。