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

sre*_*rek 15 python string position find

我有一个格式的python字符串

mystr = "hi.this(is?my*string+"
Run Code Online (Sandbox Code Playgroud)

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

mystr.find('is')
Run Code Online (Sandbox Code Playgroud)

如果'is'与'this'相关联,则返回该位置,这是不希望的.如何找到字符串中非字母字符包围的子字符串的位置?使用python 2.7

Gar*_*tty 14

这里最好的选择是使用正则表达式.Python有用于处理正则表达式re模块.

我们使用简单的搜索来找到以下位置"is":

>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr)
Run Code Online (Sandbox Code Playgroud)

这会将第一个匹配作为匹配对象返回.然后我们只是MatchObject.start()用来获得起始位置:

>>> match.start(1)
8
Run Code Online (Sandbox Code Playgroud)

编辑:一个好点,我们组成"is"一个小组并匹配该组,以确保我们获得正确的位置.

正如评论中所指出的,这做了一些假设.一个是不能位于字符串开头或结尾的包围方式"is",如果是这种情况,则需要不同的正则表达式,因为这只匹配包围的字符串.

另一个是,这将数字视为特殊字符 - 你说的是非字母的,我用它来表示包含的数字.如果您不想要数字,那么使用r"\b(is)\b"是正确的解决方案.