请教一个regular expression的问题

s
shuaidou
楼主 (北美华人网)
今天看到这段,想不明白Agent Alice是怎么被substitute成A***的,有没有懂的mm给解惑一下?谢谢!
>>> agentNamesRegex = re.compile(r'Agent (\w)\w*') >>> agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.')
A**** told C**** that E**** knew B**** was a double agent.'
s
sea9
Agent space (one char) 0-n char
上面括号里的就是\1
s
shuaidou
Agent space (one char) 0-n char
上面括号里的就是\1
sea9 发表于 2022-11-10 19:35

谢谢,\1就是group(1)
c
computer101
这个subtitue第一行告诉我们,这是对原文里结构类似于(r'Agent (\w)\w*') 的所有短语中,Agent后面的内容进行替换。 例如,在你的原文里, "Agent Alice"对应的 “(\w)”是“A”, “\w*”是“lice”,因为单用\w是一个字符,\w*则是“到下一个特殊符号之前的所有字符”。这里,你会注意到(\w)这个第一个字母被用括号括起来了,这代表后面替换的时候,可以用\1来代替这个字母。 第二行告诉我们,替换的内容是'\1****',其中\1是个特殊指代符,对应的就是第一行里用括号括起来的\w,在上面的例子里,就是字母'A'。后面四个星号就是直接四个星号,直接抄在上面的(\w)字符的后面就行。 所以在例子里,'Agent Alice'这个字符串里的'Alice"就被 替换成了 "A****"
x
xinfo1
今天看到这段,想不明白Agent Alice是怎么被substitute成A***的,有没有懂的mm给解惑一下?谢谢!
>>> agentNamesRegex = re.compile(r''''''''Agent (\w)\w*'''''''') >>> agentNamesRegex.sub(r''''''''\1****'''''''', ''''''''Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.'''''''')
A**** told C**** that E**** knew B**** was a double agent.''''''''

shuaidou 发表于 2022-11-10 19:18

每个 ‘Agent Name’
被变成 N****
N 是 Name 的第一个字母
N换成任何一个字母都一样。

这个double agent,是中国人写的code吧? 只见过dual agent
B
Banana.Republic
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
g
gokgs
少用regex, 越少越好。
W
WernerCA
少用regex, 越少越好。
gokgs 发表于 2022-11-10 20:37

没错,你现在用得爽,好有成就感。等过了一年以后要改code或者加其他条件的时候,怕是又要花好几个小时来回忆当时是咋想的,用了这么莫名其妙的regex. 要是这个code 不幸传给了其他人,除非你能写好详细的注释,基本上是要被重写的,因为没人愿意花时间去琢磨这个。现在的小年轻都是Python/Java 里面字符串功能用惯了的,谁还搞这个?
x
xinfo1
没错,你现在用得爽,好有成就感。等过了一年以后要改code或者加其他条件的时候,怕是又要花好几个小时来回忆当时是咋想的,用了这么莫名其妙的regex. 要是这个code 不幸传给了其他人,除非你能写好详细的注释,基本上是要被重写的,因为没人愿意花时间去琢磨这个。现在的小年轻都是Python/Java 里面字符串功能用惯了的,谁还搞这个?
WernerCA 发表于 2022-11-10 21:03


没那么险乎!python中用这个regexpr很简单的。 div into python3 这本书regexp的章节查一下就够了。
如果你要用perl 语言来写一遍 code,三个月后自己回来pickup, 那个回忆痛苦,比这个regexp 痛苦多了。
很多大公司,根本不想改legacy perl,但是最终都被迫改成了 python.
h
hijklmn
每个 ‘Agent Name’
被变成 N****
N 是 Name 的第一个字母
N换成任何一个字母都一样。

这个double agent,是中国人写的code吧? 只见过dual agent

xinfo1 发表于 2022-11-10 19:56

double agent是双面间谍,dual agent是房地产业的说法。。。