我有一个Python字符串格式化的问题
mystr = "hi.this(is?my*string+"
我需要获取被特殊字符或非字母字符(即示例中第二个“is”)所包围的“is”的位置。但是,使用...mystr.find('is')
如果与“this”相关联的“is”将被返回,这是不希望的。如何在字符串中查找被非字母字符包围的子字符串的位置?使用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"
作为一组,并匹配该组以确保得到正确的位置。
正如评论中指出的那样,这里做了一些假设。其中之一是surrounded表示"is"
不能在字符串的开头或结尾,如果是这种情况,则需要使用不同的正则表达式,因为这只匹配了被包围的字符串。
另一个假设是计数数字作为特殊字符 - 您已经说明non-alphabetic,我认为这意味着包括数字。如果您不想计算数字,则使用r"\b(is)\b"
是正确的解决方案。
re.search(r'\bis\b')
- 否则你会匹配前面的符号,位置就不对了。 - georg\b
不起作用 - 但是关于位置错误的好点子,我没有注意到,已经修复了。 - Gareth Latty