【发布时间】:2017-10-25 19:11:12
【问题描述】:
注意:此帖子与帖子“Re.sub not working for me”不同。
- 那篇文章是关于匹配和替换字符串中的任何非字母数字子字符串。
- 此问题专门针对匹配和替换明确显示在字符串开头的非字母数字子字符串。
以下方法尝试匹配字符串的任何非字母数字字符串“AT THE BEGINNING”,并将其替换为新字符串“BEGINNING_”
def m_getWebSafeString(self, dirtyAttributeName):
cleanAttributeName = ''.join(dirtyAttributeName)
# Deal with beginning of string...
cleanAttributeName = re.sub('^[^a-zA-z]*',"BEGINNING_",cleanAttributeName)
# Deal with end of string...
if "BEGINNING_" in cleanAttributeName:
print ' ** ** ** D: "{}" ** ** ** C: "{}"'.format(dirtyAttributeName, cleanAttributeName)
问题描述:该方法似乎不仅替换了非字母数字字符,而且还错误地将“BEGINNING_”字符串插入到传递给它的所有字符串的开头。也就是说……
良好的结果:如果方法传递了字符串*@#$ThisIsMyString1,它会正确返回BEGINNING_ThisIsMyString1
坏/不需要的结果:但是,如果方法传递了字符串ThisIsMyString2,它会错误地(并且总是)插入替换字符串(BEGINNING_),即使没有非字母数字字符,并产生结果BEGINNING_ThisIsMyString2
我的问题: 编写 re.sub() 行的正确方法是什么,它只替换字符串开头的那些非字母数字字符,这样它就不会总是插入原始输入字符串开头的替换字符串?
【问题讨论】:
标签: python regex string replace