Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python迭代正则表达式,从分隔符之间提取文本_Python_Regex_String - Fatal编程技术网

Python迭代正则表达式,从分隔符之间提取文本

Python迭代正则表达式,从分隔符之间提取文本,python,regex,string,Python,Regex,String,我有一个正则表达式函数,它从两个预定义分隔符(开始和结束)之间提取字符串元素: 但这只抓住了它找到的第一个匹配项;我需要的是拿到所有的火柴,这样 Findy('want', 'and', string) >>>['A','B','C'] 我已经尝试合并re.findall,但是我并不总是知道在我的开始和结束分隔符之间会存在什么模式,所以没有运气 我如何重构Findy以迭代字符串并提取所有匹配项 不知道此代码是否满足您的要求: def findy(start, end, any

我有一个正则表达式函数,它从两个预定义分隔符(开始和结束)之间提取字符串元素:

但这只抓住了它找到的第一个匹配项;我需要的是拿到所有的火柴,这样

Findy('want', 'and', string)
>>>['A','B','C']
我已经尝试合并re.findall,但是我并不总是知道在我的开始和结束分隔符之间会存在什么模式,所以没有运气


我如何重构Findy以迭代字符串并提取所有匹配项

不知道此代码是否满足您的要求:

def findy(start, end, anystr):
    res = []
    tmp = anystr.split(start)[1:]
    for e in tmp:
        res.append(e.split(end)[0].strip())
    return res

不知道此代码是否满足您的要求:

def findy(start, end, anystr):
    res = []
    tmp = anystr.split(start)[1:]
    for e in tmp:
        res.append(e.split(end)[0].strip())
    return res

使用带有“向后看”和“向前看”的正则表达式:

>>> import re
>>> string = "I want A and I want B and I want C and..."
>>> re.findall(r'(?<=want ).*?(?= and)', string)
['A', 'B', 'C']

使用带有“向后看”和“向前看”的正则表达式:

>>> import re
>>> string = "I want A and I want B and I want C and..."
>>> re.findall(r'(?<=want ).*?(?= and)', string)
['A', 'B', 'C']

以下是重新定义Findy的脚本:

from __future__ import print_function
import re


def Findy(start, end, anystring):
    pattern = '{}(.*?){}'.format(start, end)
    return re.findall(pattern, anystring)

string = 'I want A and I want B and I want C and...'
print(Findy('want', 'and', string))
输出:
>>['A','B','C']

模式如下:

  • 开始匹配字符开始
  • (*)。捕获除换行符以外的任何字符,*零次或多次?尽可能地,()是一个捕获组
  • 结束匹配字符结束
  • UDPATE:如果不需要空白字符,可以使用
    pattern='{}\s*(\s*?)\s*{}'。格式(开始、结束)


    输出:
    >>['A','B','C']

    这是一个脚本,重新定义Findy:

    from __future__ import print_function
    import re
    
    
    def Findy(start, end, anystring):
        pattern = '{}(.*?){}'.format(start, end)
        return re.findall(pattern, anystring)
    
    string = 'I want A and I want B and I want C and...'
    print(Findy('want', 'and', string))
    
    输出:
    >>['A','B','C']

    模式如下:

  • 开始匹配字符开始
  • (*)。捕获除换行符以外的任何字符,*零次或多次?尽可能地,()是一个捕获组
  • 结束匹配字符结束
  • UDPATE:如果不需要空白字符,可以使用
    pattern='{}\s*(\s*?)\s*{}'。格式(开始、结束)


    输出:
    >>['A'、'B'、'C']

    伟大的人物——甚至优雅!我更喜欢向前看/向后看,因为它更具可读性。谢谢你的帮助。很棒的东西,甚至很优雅!我更喜欢向前看/向后看,因为它更具可读性。谢谢你的帮助。谢谢你的帮助!这确实有效,但我不得不使用John1024的解决方案,因为它是一个单行程序。谢谢你的帮助!这确实有效,但我不得不使用John1024的解决方案,因为它是一个单行程序。