我目前正在编写自己的语言,并且有一些不同类型的字符串文字,它们使用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"']
如果你无法猜测,我对正则表达式缺乏经验,所以我很感激任何帮助。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果您只想获取第一个分隔符和最近的相同尾随分隔符之间的内容,可以使用
([\"'`])
请参阅Python demo
<强>详情:
(.*?)
- 第1组匹配双引号,单引号或反引号\1
- 第2组捕获任何0+字符,尽可能少,直到第一次出现\1
- 与第1组中保留的值相同(var arrayOfFriends = Artist[0].friends.split(", ");
// arrayOfFriends = ['James', 'Harry', 'Bob']
是对第1组值的反向引用)。答案 2 :(得分:-1)
建立在Wiktor Stribiżew的基础上,它可以处理多行和转义引号:
([\"'`])(?:[\s\S])*?(?:(?<!\\)\1)
我已经测试并正在Javascript中使用它,但是它可以在Python中按原样工作: