簡體   English   中英

如何匹配此 Python 正則表達式中的單詞或句子?

[英]how to match either word or sentence in this Python regex?

我對正則表達式相當熟悉,但這很棘手。 我需要從 SQL 案例陳述中找到這樣的實例:

當 col_name = '這可以是一個單詞或句子'

當它只有一個詞時,我可以匹配上面的內容,但是當它超過一個詞時,它就不起作用了。

s = """when col_name = 'a sentence of words'"""

x = re.search("when\s(\w+)\s*=\s*\'(\w+)", s)

if x:
    print(x.group(1)) # this returns "col_name"
    print(x.group(2)) # this returns "a"

我希望 group(2) 返回“一個單詞的句子”,但我只是得到第一個單詞。 那部分可以是一個詞,也可以是幾個詞。 怎么做?

當我添加第二個 \' 時,我找不到匹配項:

x = re.search("when\s(\w+)\s*=\s*\'(\w+)\'", s)

您可以使用 Group 2 模式匹配除單引號以外的所有字符,而不是匹配字母、數字和連接標點符號(“word”字符):

import re
s = """when col_name = 'a sentence of words'"""
x = re.search(r"when\s+(\w+)\s*=\s*'([^']+)", s)
if x:
    print(x.group(1)) # this returns "col_name"
    print(x.group(2)) # this returns "a sentence of words"

請參閱Python 演示

[^']是一個否定字符 class 匹配除單引號之外的任何字符,請參閱正則表達式演示

如果字符串可以包含轉義的單引號,您可以考慮將[^']替換為

  • 如果轉義字符是' : ([^']*(?:''[^']*)*)
  • 如果轉義字符是\ : ([^\\']*(?:\\.[^'\\]*)*)

請注意使用原始字符串文字來定義正則表達式模式(所有反斜杠都被視為其中的文字反斜杠)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM