[英]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值的反向引用)。 在WiktorStribiżew的基礎上,它處理多行和轉義引號:
([\"'`])(?:[\s\S])*?(?:(?<!\\)\1)
我測試並在Javascript中使用它,但它在Python中工作原樣:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.