我有一个我需要编辑的字符串,它看起来与此类似:
string = "Idaho Ave N,,Crystal,Mn,55427-1463,US,,610839124763,Expedited"
如果您注意到状态初始“Mn”没有正确格式化。我正在尝试使用正则表达式来改变它:
re.sub("[A-Z][a-z],", "[A-Z][A-Z],", string)
然而,re.sub将第二部分视为文字,并将Mn改为[A-Z] [A-Z]。我将如何使用re.sub(或类似且简单的东西)在此字符串中正确地将Mn更改为MN?
提前谢谢!
答案 0 :(得分:2)
您的re.sub
可能会修改您不想修改的字符串部分。尝试明确处理列表中的正确元素:
input = "Idaho Ave N,,Crystal,Mn,55427-1463,US,,610839124763,Expedited"
elems = input.split(',')
elems[3] = elems[3].upper()
output = ','.join(elems)
返回
'Idaho Ave N,,Crystal,MN,55427-1463,US,,610839124763,Expedited'
答案 1 :(得分:0)
您可以将函数作为替换参数传递给re.sub
,以从匹配对象生成替换字符串,例如:
import re
s = "Idaho Ave N,,Crystal,Mn,55427-1463,US,,610839124763,Expedited"
def upcase(match):
return match.group().upper()
print re.sub("[A-Z][a-z],", upcase, s)
(这忽略了你是否真的用这种方法找到状态首字母的担忧。)
re.sub
的相应文档为here。
答案 2 :(得分:0)
sub(pattern, repl, string, count=0)
返回通过替换最左边获得的字符串 由字符串中的模式非重叠出现 替换代表repl可以是字符串也可以是可调用的; 如果处理了一个字符串,则反斜杠转义。如果是 一个可调用的,它传递了匹配对象,必须返回 要使用的替换字符串。
re.sub("[A-Z][a-z]", lambda m: m.group(0).upper(), myString)
我会避免调用你的变量string
,因为那是一个类型名称。
答案 3 :(得分:-1)
您可以在正则表达式中的括号中创建一个组,然后通过其组号引用它:
re.sub("([A-Z][a-z]),", "\1,".upper(), string)