【问题标题】:Re: finding repeating patterns with lines in between回复:找到中间有线条的重复模式
【发布时间】:2018-04-22 02:04:31
【问题描述】:

输入如下

MY_PROJ10  
1st line  
2nd line  

MY_PROJ11  
3rd line  
4th line  


----------

使用我要捕获的正则表达式

result [0]  
Group 0 MY_PROJ10  
Group 1  
1st line  
2nd line

result [1]  
Group 0 MY_PROJ11  
Group 1  
3rd line  
4th line

我的第一次破解是
正则表达式 = r"^(MY_PROJ.+)([\s\S]+)"
然后做多行
但这会捕获 MY_PROJ10
之后的所有以下行 我确信有办法在正则表达式中做到这一点。
我正在尝试使用 regex101.com,但目前还没有运气

【问题讨论】:

标签: python regex


【解决方案1】:

你可以使用(?m)^(MY_PROJ.*)([\s\S]*?)(?=[\n\r]MY_PROJ|\Z):

    In [2]: s = """
   ...: MY_PROJ10
   ...: 1st line
   ...: 2nd line
   ...:
   ...: MY_PROJ11
   ...: 3rd line
   ...: 4th line
   ...: """

In [3]: re.findall(r'(?m)^(MY_PROJ.*)([\s\S]*?)(?=[\n\r]MY_PROJ|\Z)', s)
Out[3]:
[('MY_PROJ10', '\n1st line  \n2nd line  \n'),
 ('MY_PROJ11', '\n3rd line  \n4th line\n')]

【讨论】:

  • 美丽的东西,它适用于 Chrisz。现在你如何学习这些棘手的?任何建议(除了张贴在 SO :))
  • 这是一个很好的起点stackoverflow.com/questions/22937618/…
  • 另外,对于任何你想匹配 until 东西的正则表达式,积极的前瞻是你的朋友。
【解决方案2】:

你可以试试这个,

(?s)(MY_PROJ\d+)[\s]*((?:(?!MY_PROJ\d+).)+)

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2016-03-24
    • 2015-12-01
    • 2015-01-27
    • 2017-03-05
    • 2021-09-08
    • 2021-07-01
    相关资源
    最近更新 更多