Python Regex:在两个表达式之间搜索表达式(也是regexed)

2024-10-01 00:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从文本中获取字符串,其中字符串位于两个给定的其他字符串之间—但后两个字符串的部分定义也都使用regex表达式。你知道吗

因此,从以下几行:

ALPHA101BETAsomething1GAMMA532DELTA
ALPHA231BETAsomething2GAMMA555DELTA
ALPHA341BETAagainsomethingsomethingGAMMA998DELTA

我想得到以下信息:

something1
something2
againsomething

我的问题是,我不能定义开始和结束表达式,所以这些是加上一个三位数的表达式再加上一些东西。你知道吗

到目前为止,我试过但失败了:

re.findall("ALPHA(?:\d\.){3}BETA(.*?)GAMMA(?:\d\.){3}DELTA", pagetext)

我怎样才能告诉解析器给定的regex匹配组不是期望的结果,而是开始/结束字符串的一部分?你知道吗


Tags: 字符串文本re信息定义表达式regexfindall
2条回答

我对regex做了一点修改,现在它适合我了。 你可以用重新编译, 检索,和re.集团要获取您要查找的特定子字符串:

import re
REGEX = re.compile(r'ALPHA(\d){3}BETA(.*?)GAMMA(\d){3}DELTA')
# The next part is all about how your pagetext is formatted.
# if you have newlines in the pagetext:
for line in pagetext.split('\n'):
    result = re.search(REGEX, line)
    your_desired_str = result.group(2)

# if you just want to read the text line by line from a file:
with open(yourfile) as infile:
    for line in infile:
        result = re.search(REGEX, line)
        your_desired_str = result.group(2)

这对你有用您:-你知道吗

import re
text ='ALPHA101BETAsomething1GAMMA532DELTA\nALPHA231BETAsomething2GAMMA555DELTA\nALPHA341BETAagainsomethingsomethingGAMMA998DELTA'


for line in text.split('\n'):

    print re.findall(r'ALPHA+\d+BETA(.*?)GAMMA+\d+DELTA',line)[0]

相关问题 更多 >