我想在正则表达式中使用一个变量,我如何在Python中做到这一点?

TEXTO = sys.argv[1]

if re.search(r"\b(?=\w)TEXTO\b(?!\w)", subject, re.IGNORECASE):
    # Successful match
else:
    # Match attempt failed

当前回答

下面是你可以使用的另一种格式(在python 3.7上测试)

regex_str = r'\b(?< \ \w)%s\b(

我发现当你不能使用{}变量(这里替换为%s)时,它很有用。

其他回答

rx = r'\b(?<=\w){0}\b(?!\w)'.format(TEXTO)

下面是你可以使用的另一种格式(在python 3.7上测试)

regex_str = r'\b(?< \ \w)%s\b(

我发现当你不能使用{}变量(这里替换为%s)时,它很有用。

我需要搜索彼此相似的用户名,Ned Batchelder说的非常有用。然而,当我使用re.compile创建我的re搜索项时,我发现我有更清晰的输出:

pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)"
matches = re.findall(pattern, lines)

输出可以使用以下命令打印:

print(matches[1]) # prints one whole matching line (in this case, the first line)
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line.
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):

这将把TEXTO中的内容作为字符串插入到正则表达式中。

from re import search, IGNORECASE

def is_string_match(word1, word2):
    #  Case insensitively function that checks if two words are the same
    # word1: string
    # word2: string | list

    # if the word1 is in a list of words
    if isinstance(word2, list):
        for word in word2:
            if search(rf'\b{word1}\b', word, IGNORECASE):
                return True
        return False

    # if the word1 is same as word2
    if search(rf'\b{word1}\b', word2, IGNORECASE):
        return True
    return False

is_match_word = is_string_match("Hello", "hELLO") 
True

is_match_word = is_string_match("Hello", ["Bye", "hELLO", "@vagavela"])
True

is_match_word = is_string_match("Hello", "Bye")
False