在python中使用re.sub使字母大写?
在许多编程语言中,以下命令 找到在python中使用re.sub使字母大写?,python,regex,Python,Regex,在许多编程语言中,以下命令 找到foo([a-z]+)条并替换为GOO\U\1GAR 将导致整个匹配以大写形式进行。我在python中似乎找不到对应的代码;它存在吗?您可以使用它的一些变体: s = 'foohellobar' def replfunc(m): return m.groups()[0]+m.groups()[1].upper()+m.groups()[2] re.sub('(foo)([a-z]+)(bar)',replfunc,s) 给出输出: 'fooHELLOb
foo([a-z]+)条
并替换为GOO\U\1GAR
将导致整个匹配以大写形式进行。我在python中似乎找不到对应的代码;它存在吗?您可以使用它的一些变体:
s = 'foohellobar'
def replfunc(m):
return m.groups()[0]+m.groups()[1].upper()+m.groups()[2]
re.sub('(foo)([a-z]+)(bar)',replfunc,s)
给出输出:
'fooHELLObar'
您可以向传递一个函数,该函数将允许您执行此操作,以下是一个示例:
def upper_repl(match):
return 'GOO' + match.group(1).upper() + 'GAR'
以及一个使用它的示例:
>>> re.sub(r'foo([a-z]+)bar', upper_repl, 'foobazbar')
'GOOBAZGAR'
你是说像这样的事吗
>>>x = "foo spam bar"
>>>re.sub(r'foo ([a-z]+) bar', lambda match: r'foo {} bar'.format(match.group(1).upper()), x)
'foo SPAM bar'
以下是re.sub
(emphasis mine)的文档字符串供参考
返回通过替换最左边的字符串获得的字符串
字符串中模式的非重叠引用由
替换回复。repl可以是字符串或可调用的;
如果是字符串,则处理其中的反斜杠转义如果是
一个可调用函数,它传递匹配对象,并且必须返回
要使用的替换字符串
如果您已经有了一个替换字符串(模板),那么您可能不想用
m.group(1)+…+m.group(2)+…+m.group(3)
的冗长内容来替换它。。。有时候有一根整齐的小绳子是很好的
您可以使用MatchObject
函数以与相同的方式评估匹配模板,从而尽可能保留原始模板。您可以在相关部件上使用upper
re.sub(r'foo([a-z]+)bar', lambda m: 'GOO' + m.expand('\1GAR').upper())
虽然这在上面的示例中不是特别有用,而且在复杂的情况下也没有帮助,但对于捕获组数量更多的较长表达式,例如MAC地址审查正则表达式,可能更方便,您只想确保全部替换内容是否大写。对于那些在谷歌上遇到此问题的人 还可以使用re.sub匹配重复模式。例如,可以将带空格的字符串转换为大小写:
def to_camelcase(string):
string = string[0].lower() + string[1:] # lowercase first
return re.sub(
r'[\s]+(?P<first>[a-z])', # match spaces followed by \w
lambda m: m.group('first').upper(), # get following \w and upper()
string)
to_camelcase('String to convert') # --> stringToConvert
def to_camelcase(字符串):
string=字符串[0]。lower()+字符串[1:]#先小写
返回有关(
r'[\s]+(?P[a-z]),#匹配空格,后跟\w
lambda m:m.group('first').upper(),#获取以下内容\w和upper()
(字符串)
to_camelcase('String to convert')35;-->stringto convert
考虑到这一点,我认为这是必须的,尽管它非常复杂。只是想补充一点,您可能需要显式地将扩展字符串定义为regex,具体取决于解释器:m.expand(r'\1')
工作,而m.expand('\1')
被视为ASCII 001(至少在3.7.2上).pythonv3.6+使用fstring:re.sub(r'foo([a-z]+)bar',lambda match:fr'foo{match.group(1.upper()}bar',x)