regex - 正则表达式逐行匹配并在出现特定字符串时停止
问题描述
我正在使用re
python,我无法让我的逻辑解决这个问题。我的文字如下:
(...)
Zelite and FOS ont are limiting small bowel disturbance.
Indications :
chronical kidney disease (IRC)
management of urolithiasis and low tract urinary syndrome
hepatic encephalitis
management of acidophils urinary stone : purine, cystine…
Contraindication :
pregnancy, lactation, growth
Length of the treatment : ...
(...)
我只想在适应症和禁忌症之间找到一些东西。每行将是另一组。
到目前为止,我几乎满意,但事实并非如此:
([I,i]ndication[s]*\s*\:{0,1})(\s*.*\n)*? Contraindication
这给了我:
Indications :
chronical kidney disease (IRC)
management of urolithiasis and low tract urinary syndrome
hepatic encephalitis
management of acidophils urinary stone : purine, cystine…
Contraindication
我想摆脱“禁忌症”,但消极的前瞻似乎不适用于:?
. 我不知道为什么。.replace("Contraindication","") 总是可能的,但我正在寻找合适的正则表达式解决方案。
我不知道使用正则表达式是否可行,但是可以在不事先知道会有多少行的情况下为每行(在适应症和禁忌症之间)设置一个组?
祝你有美好的一天
解决方案
否定的前瞻将匹配一个未跟随前瞻中的任何内容的字符串。积极的前瞻性是您想要的。这将匹配一个字符串,该字符串后跟前瞻中的任何内容,而不包括匹配中的前瞻。在这种情况下,您可以这样做:
(?s)(?<=[iI]ndications :).*(?=Contraindication)
为了为您分解这一点,(?s)
启用单行标志,(?<=[iI]ndications :)
匹配前面有indications :
or的字符串Indications :
.*
捕捉介于两者之间的一切
并且(?=Contraindication)
表示字符串后面必须跟Contraindication
前瞻或后瞻都不包括在匹配中。如果您还想包括单词指示,只需删除它(?<=)
周围的。
推荐阅读
- javascript - 登录后反应重新渲染 - 以及异步调用后
- python - 如何绘制按日期聚合的熊猫数据框
- java - Thymeleaf in IntelliJ: cannot resolve variables
- node.js - 是否可以使用客户端呈现的应用程序和会话进行身份验证?
- nginx - 不同物理机如何使用 Nginx?
- ios - 如果手机内存已满,如何处理 SQLite db?
- asp.net - 如何在 ASP.NET Core 2.0 Razor 页面中获取域名
- xamarin - Xamarin Native Android HttpClient,它位于哪里?
- node.js - 构建运行时的 webpack 错误。'错误:找不到模块'@webassemblyjs/ast''
- post - 不好的做法?在客户端到客户端调用的标头中获取一些数据