python - 仅复制两个字符串模式之间的字符串
问题描述
测试一些正则表达式代码。我想它应该看起来像这样。
r'\stable_name:\s+([a-z _1-9]+)\n (.*?)\sid: validate'
results = re.findall(r'\stable_name:\s+([a-z _1-9]+)\n (.*?)\sid: validate',lines,flags=re.DOTALL)
但我没有得到任何结果。我得到的只是这个错误:AttributeError: 'tuple' object has no attribute 'replace'
解决方案
因此,例如:
lines = """table_name: snl_realestate_pricing_eap_pricechanges
some text here...
id: validate
table_name: snl_realestate_pricing_eap_return_5y
some text here...
id: validate
table_name: snl_realestate_pricing_eap_rates_10yrnote
some text here...
id: validate"""
正则表达式给了我:
results = re.findall(r'table_name:\s+([a-z _1-9\n]+\sid: validate',lines,flags=re.DOTALL)
>>> results
[('snl_realestate_pricing_eap_pricechanges', 'some text here...'), ('snl_realestate_pricing_eap_return_5y', 'some text here...')]
这会产生元组,你(我假设)试图做类似的事情results[0].replace()
,但你的错误会失败
更改正则表达式给了我:
results = re.findall(r'table_name:\s+(.*?)\sid: validate',lines,flags=re.DOTALL)
>>> results
['snl_realestate_pricing_eap_pricechanges\nsome text here...', 'snl_realestate_pricing_eap_return_5y\nsome text here...', 'snl_realestate_pricing_eap_rates_10yrnote\nsome text here...']
如果你想打破它,你可以映射一个拆分,或者如果你正在做其他事情,你可以完整地使用它。
>>> list(map(lambda x: x.split("\n"), results))
[['snl_realestate_pricing_eap_pricechanges', 'some text here...'], ['snl_realestate_pricing_eap_return_5y', 'some text here...'], ['snl_realestate_pricing_eap_rates_10yrnote', 'some text here...']]
如果你想摆脱一定数量的行,你可以这样:
new_results = list()
for res in map(lambda x: x.split("\n"), results)
try:
new_results.append([res[0]] + res[8:])
except IndexError:
continue
这应该保留第一行和第 9 行及以上的任何内容。用纯正则表达式做你想做的事情可能会很困难,所以在你得到你想要的块作为字符串列表之后进行处理是我要走的路。
推荐阅读
- laravel - 从 Laravel 的两个表中软删除两行
- node.js - 在 Passport、mongoose 和 nodejs 中创建多个用户
- javascript - 在电子渲染器中使用 http.createServer
- filter - 从 Ansible 变量中删除重复行
- sas - 如何使用两个密度函数之间的重叠面积百分比来估计 SAS 中的重叠系数
- node.js - Node.js 快速文件服务器(通过 HTTPS 的静态文件)
- javascript - 使用 js 添加/更改网站图标
- javascript - 如何使用 postcss 在 css 中附加属性?
- r - r中绘图中的文本和非连续线
- node.js - Sequelize - 使用字符串数组作为输入查询字符串字段