lzb1001 发表于 2022-4-25 14:25:33

红色部分从何而来?

>>> 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'> # 从何而来?

Twilight6 发表于 2022-4-25 14:38:08


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

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

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

.span() 可以获取到 Match 的下标索引访问

lzb1001 发表于 2022-4-25 15:07:05

Twilight6 发表于 2022-4-25 14:38
re.search 方法返回的是一个匹配对象: Match

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

似懂非懂,烦请大神讲得更深入些可否?

Twilight6 发表于 2022-4-25 15:23:00

lzb1001 发表于 2022-4-25 15:07
似懂非懂,烦请大神讲得更深入些可否?


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

t_str = "Python 1314 Java"
result = re.search("(?i)(*) (\d*) (*)", 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

lzb1001 发表于 2022-4-25 17:59:51

Twilight6 发表于 2022-4-25 15:23
试着运行下这个代码应该就能理解:




帮忙看看下面错在哪里?

>>> t_str = 'I love Python 1314'
>>> import re
>>> result = re.search('(?i)(*)(*)(*)(\d*)', t_str)
>>> print(result)
<re.Match object; span=(0, 1), match='I'> # 不是我想要的结果!
>>> result = re.search('(?i)(*){3}(\d*)', t_str) # (*)有3个,能否写成(*){3}?
>>> print(result)
<re.Match object; span=(0, 1), match='I'> # 不是我想要的结果!

Twilight6 发表于 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)(*) (*) (*) (\d*)'

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

像这种直接用 findall 最适合不过了:

re.findall('\w+', t_str)


lzb1001 发表于 2022-4-25 20:57:46

Twilight6 发表于 2022-4-25 19:26
第一个匹配你字符串有空格,但是你匹配的没有空格自然就只找到最开始的 I,要改成:




>>> result = re.search('(?i)((*) ){3}(\d*)', t_str)
亲测像上面这样可以匹配成功,但group()序号会受到影响
页: [1]
查看完整版本: 红色部分从何而来?