【发布时间】:2014-12-08 22:03:58
【问题描述】:
如何替换子字符串,比如以大写字母开头的单词,以及该子字符串的长度,可能使用正则表达式。
例如:
使用正则表达式"\b[A-Z]+[a-z]*\b"
“他必须去纽约”
应该变成这样:
“2 到 3 4”
我使用它的实际场景有点不同,但我认为这个场景更清晰。
【问题讨论】:
如何替换子字符串,比如以大写字母开头的单词,以及该子字符串的长度,可能使用正则表达式。
例如:
使用正则表达式"\b[A-Z]+[a-z]*\b"
“他必须去纽约”
应该变成这样:
“2 到 3 4”
我使用它的实际场景有点不同,但我认为这个场景更清晰。
【问题讨论】:
您可以使用re.sub 来接受可调用对象。每次找到不重叠的模式时,都会使用匹配对象调用该可调用对象。
>>> s = "He got to go to New York"
>>> re.sub(r'\b([A-Z][a-z]*)\b', lambda m: str(len(m.group(1))), s)
'2 got to go to 3 4'
【讨论】:
这不是那么简洁,但如果您想避免使用正则表达式和 lambda,您可以编写如下内容:
string = "He got to go to New York"
string = string.split()
for word in range(len(string)):
if string[word][0].isupper():
string[word] = str(len(string[word]))
print(" ".join(string))
【讨论】:
He got to New York, the most .. city.