<p>这个经过测试的脚本应该可以做到:</p>
<pre class="lang-py prettyprint-override"><code>import re
re_sq_long = r"""
# Match single quoted string with escaped stuff.
' # Opening literal quote
( # $1: Capture string contents
[^'\\]* # Zero or more non-', non-backslash
(?: # "unroll-the-loop"!
\\. # Allow escaped anything.
[^'\\]* # Zero or more non-', non-backslash
)* # Finish {(special normal*)*} construct.
) # End $1: String contents.
' # Closing literal quote
"""
re_sq_short = r"'([^'\\]*(?:\\.[^'\\]*)*)'"
data = r'''
menu_item = 'casserole';
menu_item = 'meat
loaf';
menu_item = 'Tony\'s magic pizza';
menu_item = 'hamburger';
menu_item = 'Dave\'s famous pizza';
menu_item = 'Dave\'s lesser-known
gyro';'''
matches = re.findall(re_sq_long, data, re.DOTALL | re.VERBOSE)
menu_items = []
for match in matches:
match = re.sub('\s+', ' ', match) # Clean whitespace
match = re.sub(r'\\', '', match) # remove escapes
menu_items.append(match) # Add to menu list
print (menu_items)
</code></pre>
<p>下面是regex的简短版本:</p>
<p><code>'([^'\\]*(?:\\.[^'\\]*)*)'</code></p>
<p>这个regex使用Jeffrey Friedl的“展开循环”效率技术进行优化。(参见:<a href="https://rads.stackoverflow.com/amzn/click/com/0596528124" rel="noreferrer" title="By Jeffrey Friedl. Best book on Regex - ever!">Mastering Regular Expressions (3rd Edition)</a>)了解详细信息。</p>
<p>注意,上面的regex相当于下面的regex(这在大多数NFA regex实现中更常见,但速度慢得多):</p>
<p><code>'((?:[^'\\]|\\.)*)'</code></p>