Chinaunix

标题: python 截取一段字符串中想要得内容 [打印本页]

作者: 小买家95912    时间: 2017-05-11 16:05
标题: python 截取一段字符串中想要得内容
对于文本中内容格式如下:a = '''
dis
#
    a
    b
    c
#
asd
#
asde
as
#
return'''

怎么去获取两个#号之间得内容了,内容为:
#
需要获取得内容
#
asd
#
需要获取得内容
#

当我使用tmp = re.findall(r'#\n(.*\n)+?#\n',a)贪婪匹配时,只能获取到以下内容:
['    c\n', 'as\n']
不适用贪婪匹配得话,tmp = re.findall(r'#\n(.*\n)+#\n',a),获取结果如下:
['as\n']

求问,怎么获取到正确得结果,谢谢。

作者: 小买家95912    时间: 2017-05-11 16:35
忘记要把贪婪匹配放在里面才行,tmp = re.findall(r'#\n((.*\n)+?)#\n',a)
这样子得结果如下:tmp[0][0]就是想要得结果。
[('    a\n    b\n    c\n', '    c\n'), ('asde\nas\n', 'as\n')]
如果更简单得话,可以用\s\S来代替,tmp = re.findall(r'#\n([\s\S]+?)#\n',a),结果如下:
['    a\n    b\n    c\n', 'asde\nas\n']

作者: haooooaaa    时间: 2017-05-11 17:09
  1. re.findall(r'#\n([^#]+)#\n',a)
复制代码

作者: 1......1    时间: 2017-06-19 10:05
小买家95912 发表于 2017-05-11 16:35
忘记要把贪婪匹配放在里面才行,tmp = re.findall(r'#\n((.*\n)+?)#\n',a)
这样子得结果如下:tmp[0][0 ...

加我们的群问效率更高,这个群是一群工程师组建的面向初学者的
Python Linux 学习群, qq 群号: 278529278 ,
Php Linux 学习群, qq 群号: 476648701 ,
非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自ChinaUnix

作者: redspider    时间: 2017-09-07 09:19
用正则说明你是外行。
这是最简单的表达式分析。把单行#当成括号就行了

尽管正则有时候很方便(在这里是把问题复杂化了),但是尽量避免用正则,尤其是复杂的正则。因为它很低效。
作者: baby_神    时间: 2017-09-07 11:24
回复 5# redspider

show code




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2