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