regex - 正則表達式開頭 - 正規表示法大小寫




如何忽略正則表達式主題字符串中的空格? (4)

當使用正則表達式模式搜索匹配項時,是否有一種簡單的方法可以忽略目標字符串中的空格? 例如,如果我的搜索是“貓”,我想要“c ats”或“ca ts”匹配。 由於我需要查找匹配的開始和結束索引(包括任何空格)以便突出顯示該匹配,並且出於格式化目的需要出現任何空格,因此我無法事先去除空白。



如果你只想允許空格,那麼

\bc *a *t *s\b

應該這樣做。 要允許標籤,請使用

\bc[ \t]*a[ \t]*t[ \t]*s\b

如果你還想在像bobcatscats一樣的文字中找到cats請移除\b錨。


這種方法可以用來自動化 (下面的示例解決方案是在Python中,但顯然它可以移植到任何語言):

你可以事先去掉空白字符並保存非空白字符的位置,以便稍後使用它們來找出原始字符串中匹配的字符串邊界位置,如下所示:

def regex_search_ignore_space(regex, string):
    no_spaces = ''
    char_positions = []

    for pos, char in enumerate(string):
        if re.match(r'\S', char):  # upper \S matches non-whitespace chars
            no_spaces += char
            char_positions.append(pos)

    match = re.search(regex, no_spaces)
    if not match:
        return match

    # match.start() and match.end() are indices of start and end
    # of the found string in the spaceless string
    # (as we have searched in it).
    start = char_positions[match.start()]  # in the original string
    end = char_positions[match.end()]  # in the original string
    matched_string = string[start:end]  # see

    # the match WITH spaces is returned.
    return matched_string

with_spaces = 'a li on and a cat'
print(regex_search_ignore_space('lion', with_spaces))
# prints 'li on'

如果你想更進一步,你可以構造匹配對象並將其返回,所以使用這個幫助器會更方便。

而且這個函數的性能當然也可以優化,這個例子只是為了顯示解決方案的路徑。


你可以在你的正則表達式中的每個其他字符之間插入可選的空白字符\s* 。 雖然被授予,但會變得有點冗長。

/cats/ - > /c\s*a\s*t\s*s/





whitespace