【发布时间】:2012-05-15 13:46:01
【问题描述】:
下面的正则表达式
\s*([\w_]*)\s*(,\s*|=\s*(\d*)\s*,)\n
匹配以下行(带有附加换行符)
_FIRST_ELEMENT_ = 10000,
在 Windows 上,但不在 Mac 上。我使用它的环境是使用 CPython 2.6 解释器的 Cinema 4D(3D 软件)的 Python 实现。
有人能够为我做一个快速测试,因为我没有 Mac。但是他没有时间为我做更多的测试。
在两个平台 (Win/Mac) 上,相同的代码已在 Cinema 4D 的脚本窗口中进行了测试。
import re
enum_match = re.compile('\s*(\w*)\s*(,\s*|=\s*(\d*)\s*,)\n')
line = ' _FIRST_ELEMENT_ = 10000,\n'
match = enum_match.match(line)
if not match:
print "Regex did not match."
else:
print match.groups()
Windows 上的输出:
('_FIRST_ELEMENT_', '= 10000,', '10000')
Mac 上的输出:
Regex did not match.
我唯一能想到的是,Mac 上的\w 中不包含下划线 (_)。
你知道为什么正则表达式在 Windows 上匹配而在 Mac 上不匹配吗?
【问题讨论】:
-
在 Snow Leopard 上运行良好,捆绑了 Python 2.5/2.6 以及 MacPorts 的 Python 2.6/2.7。请注意,Windows 使用
\r\n换行,而 OSX 仅使用\n(默认情况下),但这似乎与这个特定示例无关,因为您明确使用\n。这可能取决于您的输入文件使用什么。
标签: python regex cross-platform cinema-4d