python 正则表达式 : multiline and non-greedy

标签 python regex

我有一些这样的文字:

cc.Action = {
};

cc.FiniteTimeAction = {

};

cc.Speed = {

};

我想要的结果(列表)是:

['cc.Action = {}', 'cc.FiniteTimeAction = {}', 'cc.Speed = {}']

这是我尝试过的:

input = codecs.open(self.input_file, "r", "utf-8")
content = input.read()
result = re.findall('cc\..*= {.*};', content, re.S)
for r in result:
    print r
    print '---------------'

结果是:

[
'cc.Action = {
};

cc.FiniteTimeAction = {

};

cc.Speed = {

};'
]

任何建议将不胜感激,谢谢:)

最佳答案

匹配的开始似乎是 cc. 而匹配的结束似乎是 ; 所以我们可以使用模式:

'cc\.[^;]+'

意思是,我们匹配cc.,然后匹配所有不是;的字符([]包含字符类,^ 否定类)。

您也可以使用非贪婪重复 *?,但在这种情况下,我认为这是一种矫枉过正。正则表达式越简单越好。

要获得所需的输入,您还必须去掉换行符。我会一起提议:

result = re.findall('cc\.[^;]*;', content.replace('\n', ''))

关于 python 正则表达式 : multiline and non-greedy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22833595/

相关文章:

python - 我需要在 Python 中关闭 urllib.request.urlopen 连接吗?

regex - 在 sed 中替换/删除匹配字符串中的特殊字符

python - 在 for 循环中绘图,在 matplotlib 中具有 'hold on' 效果?

python - 如何使用 prometheus 客户端从作为 uwsgi 服务器运行的 Django 应用程序导出应用程序指标?

python - 理解Python中的递归和堆栈

javascript - 正则表达式从字符串中提取电子邮件

regex - 通过正则表达式将一列转换为 Oracle 11.1g 上的两列

.net - 使用 REGEX 查找 HTML ListItem (.NET) 的内容

javascript - 正则表达式 - 匹配从 'XXX' 开始到下一次出现

python - 替换 Python 字典中的值