我试图理解模式匹配,但对下面的代码感到非常困惑。据我所知,它会检查发送的末尾是否有 2-5 个大写字母。然后它用 '' 替换由数字分隔的 block ,用 '' 替换大写小写的 block
我真的不认为我理解了什么...我如何破译 re.sub 行?
我认为 re.split 是根据 .split 所在的分隔符分割发送的。表示通配符?
有人能给我举一个说明性的例子吗?
import re
x=0
y=[]
while x<100:
sent = raw_input("gimmie a sentence")
if re.search('[A-Z]{2,5}$', sent):
print("HERE")
sent = re.sub('[0-9]+\.[0-9]+','<PAT1>', sent)
print(sent)
sent = re.sub(' [A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]', '<PAT2>', sent)
print(sent)
y+=re.split('<PAT.>', sent)
x+= 1
print(x)
print(y)
print y
最佳答案
上述问题中的re
的解释-
[A-Z]{2,5}$
[A-Z]{2,5}$
选项:不区分大小写;精确的间距;点与换行符不匹配; ^$ 在换行符处不匹配;仅正则表达式语法
- 匹配“A”和“Z”之间的单个字符(不区分大小写)
[A-Z]{2,5}
- 2 到 5 次之间,尽可能多的次数,根据需要回馈(贪婪)
{2,5}
- 2 到 5 次之间,尽可能多的次数,根据需要回馈(贪婪)
- 在字符串末尾断言位置,或者在字符串末尾的换行符之前(如果有)(换行)
$
[0-9]+。[0-9]+
[0-9]+\.[0-9]+
选项:不区分大小写;精确的间距;点与换行符不匹配; ^$ 在换行符处不匹配;仅正则表达式语法
- 匹配“0”和“9”之间的单个字符
[0-9]+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
- 匹配字符“.”字面上的
\.
- 匹配“0”和“9”之间的单个字符
[0-9]+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
[A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]
[A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]
选项:不区分大小写;精确的间距;点与换行符不匹配; ^$ 在换行符处不匹配;仅正则表达式语法
- 匹配“A”和“Z”之间的单个字符(不区分大小写)
[A-Z]
- 匹配“a”和“z”之间的单个字符(不区分大小写)
[a-z]+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
- 按字面意思匹配字符“”
- 匹配“A”和“Z”之间的单个字符(不区分大小写)
[A-Z]
- 匹配“a”和“z”之间的单个字符(不区分大小写)
[a-z]+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
+
- 一次和无限次之间,尽可能多次,根据需要回馈(贪婪)
- 按字面意思匹配字符“”
- 匹配不在“A”和“Z”范围内的任何单个字符(不区分大小写)
[^A-Z]
re.sub('[0-9]+.[0-9]+','',已发送)
正如文档所说,re.sub
的一般格式如下
re.sub(pattern, repl, string, count=0, flags=0)
示例-
>>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',r'static PyObject*\npy_\1(void)\n{','def myfunc():')
它会回来
'static PyObject*\npy_myfunc(void)\n{'
其中\1
捕获组1
,即([a-zA-Z_][a-zA-Z_0-9]*)
关于python - 理解Python中的正则表达式分隔符、sub、,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536452/