Python 字符串操作:部分转换为小写

Python 字符串操作:部分转换为小写,python,Python,正如标题所说:在保持部分不变的情况下,将字符串从大小写转换为小写的最佳方式是什么?e、 g.一个字符串,如:FormatDate(%M)==2或stArTDate(%Y/%M)==11/3,我想将其转换为FormatDate(%M)==2或stArTDate(%Y/%M)==11/3,即将其更改为小写,大括号之间的部分除外()。对于第一个示例,我提出了如下内容: >>> import re >>> fdt = re.compile('(F|f)(O|o)(R|

正如标题所说:在保持部分不变的情况下,将字符串从大小写转换为小写的最佳方式是什么?e、 g.一个字符串,如:
FormatDate(%M)==2
stArTDate(%Y/%M)==11/3
,我想将其转换为
FormatDate(%M)==2
stArTDate(%Y/%M)==11/3
,即将其更改为小写,大括号之间的部分除外
)。对于第一个示例,我提出了如下内容:

>>> import re
>>> fdt = re.compile('(F|f)(O|o)(R|r)(M|m)(A|a)(T|t)(D|d)(A|a)(T|t)(E|e)\(')
>>> ss = "forMatDate(%M)==2"
>>> if fdt.match(ss):
...   SS = ss.split('(')
...   SS[0] = SS[0].lower()
...   ss = "(".join(SS)
... 
>>> print ss
formatdate(%M)==2
虽然它工作得很好,但我不太喜欢这样做。正则表达式是丑陋的,它使事情几乎限于一个特定的字符串。有没有更好的(因此是动态的)方法?提前谢谢。干杯


更新:

我可能没有说得很清楚:它并不总是
formatdate()
,有时是
startdate()
enddate()
以及
UserName==JohnDee
等等。。(这是用户输入的一部分)但是格式总是一样的,我想要一些可重用的东西。因此,这是基于
Krumelur的
脚本的更新版本

>>> fdt = re.compile('\(%[dmwyMW].*\)')
>>> ss = "formatDate(%M)==4"
>>> st = "UserName==JohnDee"
>>>
>>> def dt_lower(sX):
...   if fdt.search(sX):
...     p1,p2 = sX.split('(',1)
...     sX = "%s(%s" % (p1.lower(), p2)
...   else: sX = sX.lower()
...   return sX
... 
>>> print dt_lower(ss)
formatdate(%M)==4
>>>
>>> print dt_lower(st)
username==johndee

这正是我想要的。谢谢大家的帮助。干杯

您可以用

if ss.lower().startswith('formatdate'):

你的琴弦总是这样吗?如果是这样,也许这就足够了:

p1,p2 = instr.split('(',1)
lc = '%s(%s' % (p1.lower(), p2)

我真的不明白为什么要使用正则表达式?你为什么不这样做呢:

x, y = ss.split('(')
'('.join((x.lower(), y))

再加上克鲁默勒的回答,你可能想做到这一点


p1,p2=inst.split(“(”,1)

我认为你不能得到比这更多的“Pythonic”:

Python 2.7.1 (r271:86832, May 27 2011, 21:41:45) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ss = "forMatDate(%M)==2"
>>> if ss.lower().startswith('formatdate'):
...     i,j = ss.split('(', 1)
...     ss = '('.join((i.lower(), j))
... 
>>> ss
'formatdate(%M)==2'
不需要正则表达式,只需要


也适用于Python 3.2。

这样拆分只发生一次。其他括号不受影响。不要忘记
lower(())
后面的括号。是的,我认为
lower
是错误。
lc='%s(%s%%(p1.lower(),p2)
工作得很好。