Python 检查一个字符串istitle并相应地修改另一个字符串

Python 检查一个字符串istitle并相应地修改另一个字符串,python,regex,Python,Regex,我有一个稍微修改过的vim插件版本,如下所示: class SyntaxElement: def __init__(self, pattern, closingline): self.pattern = pattern self.closingline = closingline def match(self, line): """ Return (indent, closingline) or (None, None)"""

我有一个稍微修改过的vim插件版本,如下所示:

class SyntaxElement:
    def __init__(self, pattern, closingline):
        self.pattern = pattern
        self.closingline = closingline
    def match(self, line): 
        """ Return (indent, closingline) or (None, None)"""
        match = self.pattern.search(line)
        if match:
            indentpattern = re.compile(r'^\s*')
            variablepattern = re.compile(r'\$\{(?P<varname>[a-zA-Z0-9_]*)\}')
            indent = indentpattern.search(line).group(0)
            closingline = self.closingline
            # expand variables in closingline
            while True:
                variable_match = variablepattern.search(closingline)
                if variable_match:
                    try:
                        replacement = match.group(variable_match.group('varname'))
                    except:
                        print("Group %s is not defined in pattern" % variable_match.group('varname'))
                        replacement = variable_match.group('varname')
                    try:
                        closingline = closingline.replace(variable_match.group(0), replacement)
                    except TypeError:
                        if replacement is None:
                            replacement = ""
                        closingline = closingline.replace(variable_match.group(0), str(replacement))
                else:
                    break
        else:
            return (None, None)
        closingline = closingline.rstrip()
        return (indent, closingline)


def fortran_complete():

    syntax_elements = [
        SyntaxElement(re.compile(r'^\s*\s*((?P<struc>(program)))\s*((?P<name>([a-zA-Z0-9_]+)))', re.IGNORECASE),
                      'End ${struc} ${name}' )..]
类语法元素:
定义初始(自身、模式、闭合线):
self.pattern=模式
self.closingline=closingline
def匹配(自身、线路):
“”“返回(缩进、结束行)或(无、无)”
match=self.pattern.search(行)
如果匹配:
indentpattern=re.compile(r'^\s*')
variablepattern=re.compile(r'\$\{(?P[a-zA-Z0-9\]*)\})
缩进=缩进模式。搜索(行)。组(0)
closingline=self.closingline
#在closingline中展开变量
尽管如此:
variable\u match=variablepattern.search(closingline)
如果变量_匹配:
尝试:
替换=match.group(变量\u match.group('varname'))
除:
打印(“组%s未在模式“%variable\u match.Group('varname')中定义)
replacement=variable\u match.group('varname')
尝试:
closingline=closingline.replace(变量_match.group(0),replacement)
除类型错误外:
如果没有更换:
替换=“”
closingline=closingline.replace(变量_match.group(0),str(replacement))
其他:
打破
其他:
返回(无,无)
closingline=closingline.rstrip()
返回(缩进、结束行)
def fortran_complete():
语法元素=[
语法元素(重新编译(r'^\s*\s*(?P(程序)))\s*(?P([a-zA-Z0-9+)))”,重新命名,
'End${struc}${name}')…]
其中我只添加了
re.IGNORECASE

我的问题如下:

Fortran不区分大小写。所以,
PROGRAM
PROGRAM
PROGRAM
是等价的,这就是这里的
${struc}
。但是,我还想匹配
End
案例。所以,如果我写,
程序
,我想要“结束”;如果我写,
程序
,我希望有“结束”

因此,换句话说,我想检查
Program
istitle
,还是
isupper
lower
,并相应地更改我的“End”字符串


有可能吗?

Regex获取“struc”组并进行比较

if re.group('struc') == re.group('struc').title():
    end_stmt = 'End'
elif re.group('struc') == re.group('struc').lower():
    end_stmt = 'end'
elif re.group('struc') == re.group('struc').upper():
    end_stmt = 'END'
else:
    # etc.
    pass

syntax_elements = [
    SyntaxElement(..., end_stmt + '...')

请只留下代码中有意义的部分我很抱歉,但我想我需要展示
SyntaxElement
类,以及至少一个它如何工作的示例。还是说我需要展示更多?