鱼C论坛

 找回密码
 立即注册
查看: 1077|回复: 6

[已解决]红色部分从何而来?

[复制链接]
发表于 2022-4-25 14:25:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> s = ''
>>> for i in range(0,65536):
        s += chr(i)

       
>>> s

>>> len(s)
65536
>>> import re
>>> re.findall('\d', s)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩', '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '߀', '߁', '߂', '߃', '߄', '߅', '߆', '߇', '߈', '߉', '०', '१', '२', '३', '४', '५', '६', '७', '८', '९', '০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯', '੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯', '૦', '૧', '૨', '૩', '૪', '૫', '૬', '૭', '૮', '૯', '୦', '୧', '୨', '୩', '୪', '୫', '୬', '୭', '୮', '୯', '௦', '௧', '௨', '௩', '௪', '௫', '௬', '௭', '௮', '௯', '౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯', '೦', '೧', '೨', '೩', '೪', '೫', '೬', '೭', '೮', '೯', '൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯', '෦', '෧', '෨', '෩', '෪', '෫', '෬', '෭', '෮', '෯', '๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙', '໐', '໑', '໒', '໓', '໔', '໕', '໖', '໗', '໘', '໙', '༠', '༡', '༢', '༣', '༤', '༥', '༦', '༧', '༨', '༩', '၀', '၁', '၂', '၃', '၄', '၅', '၆', '၇', '၈', '၉', '႐', '႑', '႒', '႓', '႔', '႕', '႖', '႗', '႘', '႙', '០', '១', '២', '៣', '៤', '៥', '៦', '៧', '៨', '៩', '᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙', '᥆', '᥇', '᥈', '᥉', '᥊', '᥋', '᥌', '᥍', '᥎', '᥏', '᧐', '᧑', '᧒', '᧓', '᧔', '᧕', '᧖', '᧗', '᧘', '᧙', '᪀', '᪁', '᪂', '᪃', '᪄', '᪅', '᪆', '᪇', '᪈', '᪉', '᪐', '᪑', '᪒', '᪓', '᪔', '᪕', '᪖', '᪗', '᪘', '᪙', '᭐', '᭑', '᭒', '᭓', '᭔', '᭕', '᭖', '᭗', '᭘', '᭙', '᮰', '᮱', '᮲', '᮳', '᮴', '᮵', '᮶', '᮷', '᮸', '᮹', '᱀', '᱁', '᱂', '᱃', '᱄', '᱅', '᱆', '᱇', '᱈', '᱉', '᱐', '᱑', '᱒', '᱓', '᱔', '᱕', '᱖', '᱗', '᱘', '᱙', '꘠', '꘡', '꘢', '꘣', '꘤', '꘥', '꘦', '꘧', '꘨', '꘩', '꣐', '꣑', '꣒', '꣓', '꣔', '꣕', '꣖', '꣗', '꣘', '꣙', '꤀', '꤁', '꤂', '꤃', '꤄', '꤅', '꤆', '꤇', '꤈', '꤉', '꧐', '꧑', '꧒', '꧓', '꧔', '꧕', '꧖', '꧗', '꧘', '꧙', '꧰', '꧱', '꧲', '꧳', '꧴', '꧵', '꧶', '꧷', '꧸', '꧹', '꩐', '꩑', '꩒', '꩓', '꩔', '꩕', '꩖', '꩗', '꩘', '꩙', '꯰', '꯱', '꯲', '꯳', '꯴', '꯵', '꯶', '꯷', '꯸', '꯹', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> re.findall(r'\d', s)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩', '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '߀', '߁', '߂', '߃', '߄', '߅', '߆', '߇', '߈', '߉', '०', '१', '२', '३', '४', '५', '६', '७', '८', '९', '০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯', '੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯', '૦', '૧', '૨', '૩', '૪', '૫', '૬', '૭', '૮', '૯', '୦', '୧', '୨', '୩', '୪', '୫', '୬', '୭', '୮', '୯', '௦', '௧', '௨', '௩', '௪', '௫', '௬', '௭', '௮', '௯', '౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯', '೦', '೧', '೨', '೩', '೪', '೫', '೬', '೭', '೮', '೯', '൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯', '෦', '෧', '෨', '෩', '෪', '෫', '෬', '෭', '෮', '෯', '๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙', '໐', '໑', '໒', '໓', '໔', '໕', '໖', '໗', '໘', '໙', '༠', '༡', '༢', '༣', '༤', '༥', '༦', '༧', '༨', '༩', '၀', '၁', '၂', '၃', '၄', '၅', '၆', '၇', '၈', '၉', '႐', '႑', '႒', '႓', '႔', '႕', '႖', '႗', '႘', '႙', '០', '១', '២', '៣', '៤', '៥', '៦', '៧', '៨', '៩', '᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙', '᥆', '᥇', '᥈', '᥉', '᥊', '᥋', '᥌', '᥍', '᥎', '᥏', '᧐', '᧑', '᧒', '᧓', '᧔', '᧕', '᧖', '᧗', '᧘', '᧙', '᪀', '᪁', '᪂', '᪃', '᪄', '᪅', '᪆', '᪇', '᪈', '᪉', '᪐', '᪑', '᪒', '᪓', '᪔', '᪕', '᪖', '᪗', '᪘', '᪙', '᭐', '᭑', '᭒', '᭓', '᭔', '᭕', '᭖', '᭗', '᭘', '᭙', '᮰', '᮱', '᮲', '᮳', '᮴', '᮵', '᮶', '᮷', '᮸', '᮹', '᱀', '᱁', '᱂', '᱃', '᱄', '᱅', '᱆', '᱇', '᱈', '᱉', '᱐', '᱑', '᱒', '᱓', '᱔', '᱕', '᱖', '᱗', '᱘', '᱙', '꘠', '꘡', '꘢', '꘣', '꘤', '꘥', '꘦', '꘧', '꘨', '꘩', '꣐', '꣑', '꣒', '꣓', '꣔', '꣕', '꣖', '꣗', '꣘', '꣙', '꤀', '꤁', '꤂', '꤃', '꤄', '꤅', '꤆', '꤇', '꤈', '꤉', '꧐', '꧑', '꧒', '꧓', '꧔', '꧕', '꧖', '꧗', '꧘', '꧙', '꧰', '꧱', '꧲', '꧳', '꧴', '꧵', '꧶', '꧷', '꧸', '꧹', '꩐', '꩑', '꩒', '꩓', '꩔', '꩕', '꩖', '꩗', '꩘', '꩙', '꯰', '꯱', '꯲', '꯳', '꯴', '꯵', '꯶', '꯷', '꯸', '꯹', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> re.findall('\d', s, re.ASCII)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> re.findall(r'\d', s, re.ASCII)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> re.search('\d', s)
<re.Match object; span=(48, 49), match='0'> # 从何而来?
>>> re.search(r'\d', s)
<re.Match object; span=(48, 49), match='0'> # 从何而来?
>>> re.search('\d', s, re.ASCII)
<re.Match object; span=(48, 49), match='0'> # 从何而来?
>>> re.search(r'\d', s, re.ASCII)
<re.Match object; span=(48, 49), match='0'> # 从何而来?
最佳答案
2022-4-25 15:23:00
lzb1001 发表于 2022-4-25 15:07
似懂非懂,烦请大神讲得更深入些可否?


试着运行下这个代码应该就能理解:
import re

t_str = "Python 1314 Java"
result = re.search("(?i)([a-z]*) (\d*) ([a-z]*)", t_str)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(3))

输出结果:
<re.Match object; span=(0, 16), match='Python 1314 Java'>
Python 1314 Java
Python
1314
Java

这里正则表达式的开头 (?!) 表示不区分大小写,后面的一个 () 代表一组,对应索引 1-3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-25 14:38:08 | 显示全部楼层

re.search 方法返回的是一个匹配对象: Match

可以对这个方法进行调用 .group() 进行输出匹配到的所有组数据,等价于 .group(0)

如果匹配字符串中有分组,那么就可以将组索引输入 .group() 中,组索引从 1 开始,不是 0 ,0 是输出整个匹配到的字符

.span() 可以获取到 Match 的下标索引访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-25 15:07:05 | 显示全部楼层
Twilight6 发表于 2022-4-25 14:38
re.search 方法返回的是一个匹配对象: Match

可以对这个方法进行调用 .group() 进行输出匹配到的所有 ...

似懂非懂,烦请大神讲得更深入些可否?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-25 15:23:00 | 显示全部楼层    本楼为最佳答案   
lzb1001 发表于 2022-4-25 15:07
似懂非懂,烦请大神讲得更深入些可否?


试着运行下这个代码应该就能理解:
import re

t_str = "Python 1314 Java"
result = re.search("(?i)([a-z]*) (\d*) ([a-z]*)", t_str)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(3))

输出结果:
<re.Match object; span=(0, 16), match='Python 1314 Java'>
Python 1314 Java
Python
1314
Java

这里正则表达式的开头 (?!) 表示不区分大小写,后面的一个 () 代表一组,对应索引 1-3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-25 17:59:51 | 显示全部楼层
Twilight6 发表于 2022-4-25 15:23
试着运行下这个代码应该就能理解:

帮忙看看下面错在哪里?

>>> t_str = 'I love Python 1314'
>>> import re
>>> result = re.search('(?i)([a-z]*)([a-z]*)([a-z]*)(\d*)', t_str)
>>> print(result)
<re.Match object; span=(0, 1), match='I'> # 不是我想要的结果!
>>> result = re.search('(?i)([a-z]*){3}(\d*)', t_str) # ([a-z]*)有3个,能否写成([a-z]*){3}?
>>> print(result)
<re.Match object; span=(0, 1), match='I'> # 不是我想要的结果!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-25 19:26:51 | 显示全部楼层
lzb1001 发表于 2022-4-25 17:59
帮忙看看下面错在哪里?

>>> t_str = 'I love Python 1314'
lzb1001 发表于 2022-4-25 17:59
帮忙看看下面错在哪里?

>>> t_str = 'I love Python 1314'



第一个匹配你字符串有空格,但是你匹配的没有空格自然就只找到最开始的 I,要改成:
'(?i)([a-z]*) ([a-z]*) ([a-z]*) (\d*)'

第二个 {3} 中括号直接搭配 ([a-z]*) 表示括号内的东西匹配 3 次,不等价分组 ([a-z]*)([a-z]*)([a-z]*) ,不能写成这样,具体如何搭配使用我也研究不深

像这种直接用 findall 最适合不过了:
re.findall('\w+', t_str)


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-25 20:57:46 | 显示全部楼层
Twilight6 发表于 2022-4-25 19:26
第一个匹配你字符串有空格,但是你匹配的没有空格自然就只找到最开始的 I,要改成:

>>> result = re.search('(?i)(([a-z]*) ){3}(\d*)', t_str)
亲测像上面这样可以匹配成功,但group()序号会受到影响
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 16:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表