Python 查找子字符串在字符串中的位置
我有一个python格式的字符串Python 查找子字符串在字符串中的位置,python,string,find,position,Python,String,Find,Position,我有一个python格式的字符串 mystr = "hi.this(is?my*string+" 在这里,我需要得到由特殊字符或非字母字符包围的“is”的位置(即本例中的第二个“is”)。然而,使用 mystr.find('is') 将返回与不需要的“this”关联的“is”位置。如何找到字符串中由非字母字符包围的子字符串的位置?使用Python2.7这里最好的选择是使用正则表达式。Python具有处理正则表达式的能力 我们使用简单的搜索来查找“is”的位置: 这会将第一个匹配作为匹配对象返
mystr = "hi.this(is?my*string+"
在这里,我需要得到由特殊字符或非字母字符包围的“is”的位置(即本例中的第二个“is”)。然而,使用
mystr.find('is')
将返回与不需要的“this”关联的“is”位置。如何找到字符串中由非字母字符包围的子字符串的位置?使用Python2.7这里最好的选择是使用正则表达式。Python具有处理正则表达式的能力 我们使用简单的搜索来查找
“is”
的位置:
这会将第一个匹配作为匹配对象返回。然后,我们只需使用以获得起始位置:
>>> match.start(1)
8
编辑:提出了一个很好的观点,我们将“is”
作为一个组,并与该组进行匹配,以确保我们得到正确的位置
正如评论中指出的那样,这是一个假设。一个是包围表示“is”
不能位于字符串的开头或结尾,如果是这种情况,则需要另一个正则表达式,因为它只匹配包围的字符串
另一个问题是,这将数字作为特殊字符来计算——您所说的非字母,我认为这意味着包括数字。如果您不想让数字计数,那么使用
r“\b(is)\b”
是正确的解决方案。您应该实际使用\b
。re.search(r'\bis\b')
-否则您也会匹配前面的符号,并且位置是错误的。@thg435询问者说非字母而非字母数字,所以\b
不起作用-但位置错误的好处在于,没有捕捉到,已修复。此外,您的表达式在开始/结束时不匹配。您仍然需要在此处查看。@thg435所要求的OP“是”
,其中被非字母字符包围-在开头或结尾不是这样。
>>> match.start(1)
8