Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找子字符串在字符串中的位置_Python_String_Find_Position - Fatal编程技术网

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”的位置: 这会将第一个匹配作为匹配对象返

我有一个python格式的字符串

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