0

我有如下 Python 字符串

string1='copy /q /y /d /e /i /r /h /v /s D:\path1\path2 D:\path3\path4'   
string2='copy /Q /y /D /E /i /r  D:\path2\path5 D:\path3\path4 /h /V /s'
string2='copy /q /y /D /e D:\path6\path7 D:\path8\path9 /i /R /h /V /S'

我想将所有 /q,/y,/d,/e,/i,/r,/h,/v,/s 转换为大写或小写。

谢谢

4

4 回答 4

5

您可以使用str.split(),遍历子字符串,将以斜杠开头的字符串转换为小写,然后str.join()再次:

" ".join(s.lower() if s.startswith("/") else s for s in string.split())

对于大写,替换s.lower()s.upper()

于 2012-08-02T12:40:00.703 回答
3

与回调一起使用re.sub(),将标志放在模式中的组中,并在回调中重新封装组。

于 2012-08-02T12:38:44.090 回答
0

这是一个使用的简单示例re.sub

def change_case(match):
    mstr=match.group()
    if mstr.lower() == mstr:
       return mstr.upper()
    else:
       return mstr.lower()

output = re.sub(r'/.',change_case,'copy /q /y /d /e /i /r /h /v /s D:\path1\path2 D:\path3\path4')
print output #'copy /Q /Y /D /E /I /R /H /V /S D:\\path1\\path2 D:\\path3\\path4'

这将转换任何“/”之后的第一个字母的大小写。如果你真的想限制你匹配的字符集,你可以只用r'/[abcdef]'改变 a、b、c、d、e 或 f 的大小写。

于 2012-08-02T12:44:18.600 回答
0

这应该有效:

re.sub(re.compile('/\w'), lambda x : x.group(0).upper(), 'test /a /b')
于 2012-08-02T12:45:29.827 回答