簡體   English   中英

正則表達式匹配字符串文字

[英]Regex to match string literal

我目前正在編寫自己的語言,並且有一些不同類型的字符串文字,它們使用3個不同的符號來表示它們。 他們在下面。

1) "Hello"是一個簡單的字符串文字,編譯為Hello

2) 'Hello'是一個訪問字符串壓縮函數的壓縮字符串。 (這會返回亂碼)

3) `Hello`返回從每個字符代碼點構造的數字

我正在嘗試使用正則表達式匹配一段代碼

`Hel"lo` 2* "Hel`lo"

但是不能提出只在第一個和最后一個字符相同時才匹配的那個。 我現在有

[`'\"]([\s\S]+|[^`'\"]+)['`\"]

但這不會產生我想要的結果。

該示例的預期結果應該是

['`Hel"lo`', ' ', '2', '*', ' ', '"Hel`lo"']

但我的正則表達式回歸

['`Hel"lo` 2* "Hel`lo"']

萬一你無法猜測,我對正則表達式缺乏經驗,所以我很感激任何幫助。

如果您只想獲取第一個分隔符和最近的相同尾隨分隔符之間的內容,您可以使用

import re
s = """`Hel"lo` 2* "Hel`lo\""""
print([x.group(2) for x in re.finditer(r"([\"'`])(.*?)\1", s)])

請參閱Python演示

細節

  • ([\\"'`]) - 組1匹配雙引號,單引號或反引號
  • (.*?) - 第2組捕獲任何0+字符,盡可能少,直到第一次出現
  • \\1 - 與組1中保存的值相同( \\1是對組1值的反向引用)。

使用捕獲組不是必需的,您可以簡單地編寫您的模式:

`[^`]*`|"[^"]*"|'[^']*'|\w+|\s+|[^`"'\s\w]

每個報價一個替代方案

演示

WiktorStribiżew的基礎上,它處理多行和轉義引號:

([\"'`])(?:[\s\S])*?(?:(?<!\\)\1)

我測試並在Javascript中使用它,但它在Python中工作原樣:

Python演示

Javascript演示

暫無
暫無

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

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