白白白白丶白 发表于 2020-6-10 11:26:17

请问这两个表达式就多个括号为什么内容不同,最后的引号是字符串的引号吗?

请问这两个表达式就多个括号为什么内容不同,最后的引号是字符串的引号吗?

Twilight6 发表于 2020-6-10 11:35:37

请问这两个表达式就多个括号为什么内容不同?

这里加不加括号就是 是否保留匹配项的问题,第一个是不保留匹配项

而第二个是匹配保留的,所以第二个把所有符合也切割并保留下来了

最后的引号是字符串的引号吗?
对的,最后一个元素就是空字符串的意思

白白白白丶白 发表于 2020-6-10 11:45:58

Twilight6 发表于 2020-6-10 11:35
这里加不加括号就是 是否保留匹配项的问题,第一个是不保留匹配项

而第二个是匹配保留的,所以第 ...

{:10_277:}匹配项是什么意思, 我基础不大好。还有如果我在字符串的前面再加上一个空格,再分割的话除了加的空格,还多出来一个空的字符串是为什么呢 ?
>>> re.split('(\W+)', ' runoob, runoob, runoob.')
['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', '']

Twilight6 发表于 2020-6-10 11:49:49

白白白白丶白 发表于 2020-6-10 11:45
匹配项是什么意思, 我基础不大好。还有如果我在字符串的前面再加上一个空格,再分割的话除了 ...

简单理解就是 保不保留切割后剩余的 字符串

你加个空格,匹配到的都是字母进行切割,因为你加了括号,就将切割后剩余的保留下拉,所以你前面会多个空格

白白白白丶白 发表于 2020-6-10 11:53:41

Twilight6 发表于 2020-6-10 11:49
简单理解就是 保不保留切割后剩余的 字符串

你加个空格,匹配到的都是字母进行切割,因为你加了括号, ...

谢谢,匹配项理解了,为什么加空格后分割出来的列表里是两个空字符串

Twilight6 发表于 2020-6-10 12:00:41

白白白白丶白 发表于 2020-6-10 11:53
谢谢,匹配项理解了,为什么加空格后分割出来的列表里是两个空字符串

好像是因为你是 \W 大写的原因才发现你是大写的,大写的是匹配非字母数字以及下划线

白白白白丶白 发表于 2020-6-10 13:38:25

那也不会出现两个字符串啊,把里面的字母符号都匹配出来不也是只剩下一个字符串吗?

白白白白丶白 发表于 2020-6-10 13:39:12

Twilight6 发表于 2020-6-10 12:00
好像是因为你是 \W 大写的原因才发现你是大写的,大写的是匹配非字母数字以及下划线

那也不会出现两个字符串啊,把里面的字母符号都匹配出来不也是只剩下一个字符串吗

Twilight6 发表于 2020-6-10 13:52:36

白白白白丶白 发表于 2020-6-10 13:39
那也不会出现两个字符串啊,把里面的字母符号都匹配出来不也是只剩下一个字符串吗


就是因为切割的是非字母丫,匹配到空格 将空格切割掉必须 头先切割然后切割尾巴但是空格前面没东西了

但是空格的头依旧要切割,导致出现了一个空字符串,这和字符串切割是一个道理,举个例子:

temp = 'cc'.split('c')
print(temp)

你可以测试下字符串切割的情况

输出结果
>>> ['', '', '']

白白白白丶白 发表于 2020-6-10 14:07:27

袄,这就是split函数本身的理解了。我去看看split定义

白白白白丶白 发表于 2020-6-10 18:39:23

Twilight6 发表于 2020-6-10 13:52
就是因为切割的是非字母丫,匹配到空格 将空格切割掉必须 头先切割然后切割尾巴但是空格前面没东西 ...

问题又来了,刚才试了一下,小写w打出来的就
不一样的结果,
没空格    空字符串在列表的头上
re.split(r'(\w+)', 'runboo, runboo, runboo.')
['', 'runboo', ', ', 'runboo', ', ', 'runboo', '.']
加空格 后在列表的结尾也没有多出来个空字符串
re.split(r'(\w+)', ' runboo, runboo, runboo.')
[' ', 'runboo', ', ', 'runboo', ', ', 'runboo', '.']

Twilight6 发表于 2020-6-10 18:43:36

白白白白丶白 发表于 2020-6-10 18:39
问题又来了,刚才试了一下,小写w打出来的就
不一样的结果,
没空格    空字符串在列表的头上


小写 和大写是两个匹配东西呀....哎哟

小写 匹配字母和数字下划线而大写匹配非字母和数字下划线

Twilight6 发表于 2020-6-10 18:47:20

白白白白丶白 发表于 2020-6-10 18:39
问题又来了,刚才试了一下,小写w打出来的就
不一样的结果,
没空格    空字符串在列表的头上


大写匹配的到空格所以前面有个空字符串呀,小写匹配不到空格

白白白白丶白 发表于 2020-6-10 19:36:16

Twilight6 发表于 2020-6-10 18:47
大写匹配的到空格所以前面有个空字符串呀,小写匹配不到空格

你看我发的代码,都是小写的,第一个字符串前面没打空格的,所以列表里第一个元素是个空字符串,但是第二个也是小写,字符串前面打了一个空格,列表第一个元素就是空格了,空字符串就不见了,\w是匹配字母数字下划线,但是这里为什么把空格匹配出来了,因为加了括号的缘故吗?

白白白白丶白 发表于 2020-6-10 20:16:58

白白白白丶白 发表于 2020-6-10 19:36
你看我发的代码,都是小写的,第一个字符串前面没打空格的,所以列表里第一个元素是个空字符串,但是第二 ...

奥对,你前面说加括号保留了切割后剩余的东西

Twilight6 发表于 2020-6-11 17:21:07

白白白白丶白 发表于 2020-6-10 20:16
奥对,你前面说加括号保留了切割后剩余的东西

{:10_245:}昨天晚上没看到你的消息 抱歉

白白白白丶白 发表于 2020-6-12 15:29:56

Twilight6 发表于 2020-6-11 17:21
昨天晚上没看到你的消息 抱歉

{:5_109:}那我说的对不对,是不是因为加了括号的原因,保留了切割后的切割后剩余的

Twilight6 发表于 2020-6-12 15:38:33

白白白白丶白 发表于 2020-6-12 15:29
那我说的对不对,是不是因为加了括号的原因,保留了切割后的切割后剩余的

嗯吧,应该没毛病
页: [1]
查看完整版本: 请问这两个表达式就多个括号为什么内容不同,最后的引号是字符串的引号吗?