【问题标题】:find position of a substring in a string查找字符串中子字符串的位置
【发布时间】:2012-05-21 06:43:43
【问题描述】:

我有一个 python 格式的字符串

mystr = "hi.this(is?my*string+"

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

mystr.find('is')

如果 'is' 与不想要的 'this' 相关联,则将返回该位置。如何找到字符串中被非字母字符包围的子字符串的位置?使用 python 2.7

【问题讨论】:

    标签: python string find position


    【解决方案1】:

    这里最好的选择是使用正则表达式。 Python 有 the re module 用于处理正则表达式。

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

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

    这会将第一个匹配项作为匹配对象返回。然后我们简单地使用MatchObject.start() 来获取起始位置:

    >>> match.start(1)
    8
    

    编辑:说得好,我们将"is" 设为一个组并匹配该组以确保我们获得正确的位置。

    正如 cmets 中所指出的,这有一些假设。一个是 surrounded 意味着"is" 不能在字符串的开头或结尾,如果是这种情况,则需要不同的正则表达式,因为它只匹配被包围的字符串。

    另一个是这将数字视为特殊字符 - 你说 non-alphabetic,我认为这意味着包括数字。如果您不想计算数字,那么使用r"\b(is)\b" 是正确的解决方案。

    【讨论】:

    • 你应该使用\b
    • re.search(r'\bis\b') - 否则你也匹配前面的符号,位置不对。
    • @thg435 提问者说 non-alphabetic 不是 non-alphanumeric,所以 \b 不起作用 - 但这个位置很好错了,没看懂,修正了。
    • 此外,您的 expr 在开始/结束时无法匹配。您仍然需要在这里环顾四周。
    • @thg435 OP 要求 "is" 其中 被非字母字符包围 - 在开头或结尾不是这种情况。
    猜你喜欢
    • 2012-08-03
    • 2017-03-27
    • 2015-09-13
    • 1970-01-01
    • 2012-12-24
    • 2014-05-06
    相关资源
    最近更新 更多