【问题标题】:Substring search with a (regex?) condition Python使用(正则表达式?)条件 Python 进行子字符串搜索
【发布时间】:2022-10-13 18:28:58
【问题描述】:

我有一种情况,我想搜索大文本中是否存在子字符串。所以,我只是在使用:

if pattern in text: ...

但是,我想确保“文本”中“模式”的存在不会立即以字母作为前缀或后缀。如果它以特殊字符、数字或空格开头或结尾,则可以。

因此,如果模式为“abc”,则匹配“some text abc”,“random texts,abc,cde”应返回 True,而搜索“some textabc”时,“random abctexts”应返回 False(因为“abc”是以字母开头或结尾)。

执行此操作的最佳方法是什么?

【问题讨论】:

  • r'(?:[^a-zA-Z])(abc)(?:[^a-zA-Z])' 将仅捕获 abc(?: ...) 表示非捕获组,因此您不会捕获非字母字符。您可以查看此community guide on regex 并随时尝试使用regex101 等工具

标签: python substring text-search


【解决方案1】:

这个怎么样:

import re

string = "random texts, abc, cde"

match = re.search(r'(^|[^a-zA-Z])abc([^a-zA-Z]|$)', string)
# If-statement after search() tests if it succeeded
if match:
    print('found', match.group())
else:
    print('did not find')

“(^|[^a-zA-Z])”表示:字符串的开头或任何非字母字符,([^a-zA-Z]|$) 类似于字符串的结尾。

再解释一下:“|”表示 OR,因此 (^|d) 表示“行首或 d”。括号用于定义 OR 运算符对哪些参数进行操作。 您希望您的 abc 字符串不被任何字母字符包围。如果你扩大一点,这样 0-9 和下划线也被禁止,你会得到一个更简单的正则表达式: r'(^|W)abc(W|$)'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2015-02-23
    • 2012-08-28
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    相关资源
    最近更新 更多