Python 在替换字段中使用 lambda 的正则表达式替换函数
Python regular expression substitution function using lambda in the replacement field
我正在尝试使用以下代码模仿 'i am your'.title()
字符串函数以获得输出 I Am Your。
但它给出了与输出相同的 i am your 而没有大写单词
re.sub(r"\b'\w", lambda m: m.group().upper(), 'i am your')
在验证它的过程中,我在互联网上看到了以下片段但无法理解 lambda 是如何获取输入的 from/as:
re.sub("[ab]", lambda x: x.group(0).upper(), "charly") # chArly
因为,
>>> f = lambda x: x.group(0).upper()
>>> f("[ab]")
AttributeError: 'str' object has no attribute 'group'
>>> f(["a","b"])
AttributeError: 'list' object has no attribute 'group'
为了更好地理解它,我尝试用 Python 反汇编器对其进行解码,但它仍然看起来很模糊
>>> dis.dis('re.sub("[ab]", lambda x: x.group(0).upper(), "charly")')
0 POP_JUMP_IF_FALSE 11877
3 POP_JUMP_IF_TRUE 25205
6 STORE_SLICE+0
7 <34>
8 DELETE_NAME 25185 (25185)
11 FOR_ITER 11298 (to 11312)
14 SLICE+2
15 IMPORT_NAME 28001 (28001)
18 DELETE_GLOBAL 24932 (24932)
21 SLICE+2
22 SETUP_LOOP 8250 (to 8275)
25 SETUP_LOOP 26414 (to 26442)
28 POP_JUMP_IF_FALSE 30063
31 JUMP_IF_TRUE_OR_POP 12328
34 STORE_SLICE+1
35 <46>
36 <117> 28784
39 LOAD_NAME 10354 (10354)
42 STORE_SLICE+1
43 <44>
44 SLICE+2
45 <34>
46 DUP_TOPX 24936
49 POP_JUMP_IF_FALSE 31084
52 <34>
53 STORE_SLICE+1
- 您需要使用
upper()
来获取大写的第一个字符
- 分词和转义文字之间有一个
'
,您需要将其删除。
- 并且您需要使用
m.group(0)
或 m[0]
来获取匹配的字符串。
>>> re.sub(r"\b\w",lambda m: m[0].upper(),"i am your")
'I Am Your'
我正在尝试使用以下代码模仿 'i am your'.title()
字符串函数以获得输出 I Am Your。
但它给出了与输出相同的 i am your 而没有大写单词
re.sub(r"\b'\w", lambda m: m.group().upper(), 'i am your')
在验证它的过程中,我在互联网上看到了以下片段但无法理解 lambda 是如何获取输入的 from/as:
re.sub("[ab]", lambda x: x.group(0).upper(), "charly") # chArly
因为,
>>> f = lambda x: x.group(0).upper()
>>> f("[ab]")
AttributeError: 'str' object has no attribute 'group'
>>> f(["a","b"])
AttributeError: 'list' object has no attribute 'group'
为了更好地理解它,我尝试用 Python 反汇编器对其进行解码,但它仍然看起来很模糊
>>> dis.dis('re.sub("[ab]", lambda x: x.group(0).upper(), "charly")')
0 POP_JUMP_IF_FALSE 11877
3 POP_JUMP_IF_TRUE 25205
6 STORE_SLICE+0
7 <34>
8 DELETE_NAME 25185 (25185)
11 FOR_ITER 11298 (to 11312)
14 SLICE+2
15 IMPORT_NAME 28001 (28001)
18 DELETE_GLOBAL 24932 (24932)
21 SLICE+2
22 SETUP_LOOP 8250 (to 8275)
25 SETUP_LOOP 26414 (to 26442)
28 POP_JUMP_IF_FALSE 30063
31 JUMP_IF_TRUE_OR_POP 12328
34 STORE_SLICE+1
35 <46>
36 <117> 28784
39 LOAD_NAME 10354 (10354)
42 STORE_SLICE+1
43 <44>
44 SLICE+2
45 <34>
46 DUP_TOPX 24936
49 POP_JUMP_IF_FALSE 31084
52 <34>
53 STORE_SLICE+1
- 您需要使用
upper()
来获取大写的第一个字符 - 分词和转义文字之间有一个
'
,您需要将其删除。 - 并且您需要使用
m.group(0)
或m[0]
来获取匹配的字符串。
>>> re.sub(r"\b\w",lambda m: m[0].upper(),"i am your")
'I Am Your'