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 に答える