-1

我想将单个 Ruby 风格的字符串与replacements匹配,如下所示:

"some ugly text #{Class.new().method("argument")}"

正如您可能看到的,令人讨厌的是它允许双引号出现在模板中而不会转义。

我需要将角双引号之间的整个文本作为单个字符串捕获。不需要进一步处理replacements

我想用一个正则表达式来提供我的简单标记器。

4

1 回答 1

0

以下似乎工作:

>>> check = re.compile(r'("((#\{([^}]|["])*\})|\\.|[^"])*")|(\'(\\.|[^\'])*\')').match
>>> check('"Text"').end()
6
>>> check('"Text #{}"').end()
10
>>> check('"Text #{"}"').end()
11
>>> check('"Text #{""}"').end()
12
>>> check('"Text #{"foo"}"').end()
16

有时只是问问题有助于解决问题。我的标记器开始使用该正则表达式正常工作,因此问题解决了。

棘手的部分是([^}]|["])*它消耗了里面的东西replacement,被包围着#{},给了#\{([^}]|["])*\}。我目前不需要双花括号。

最后一部分使用单引号中的字符串,所以不要感到惊讶。

于 2013-07-26T15:03:05.377 回答