理解python定界符中的正则表达式,

理解python定界符中的正则表达式,,python,regex,Python,Regex,我正在努力理解模式匹配,下面的代码让我非常信服。据我所知,它会检查邮件末尾是否有大量2-5个大写字母。然后用“”替换由数字分隔的块,用“”替换大写字母小写的块 我真的不认为我了解什么。。。如何破译re.sub行 我认为re.split是根据文件所在的分隔符发送的。是通配符吗 有人能给我举个例子吗 import re x=0 y=[] while x<100: sent = raw_input("gimmie a sentence")

我正在努力理解模式匹配,下面的代码让我非常信服。据我所知,它会检查邮件末尾是否有大量2-5个大写字母。然后用“”替换由数字分隔的块,用“”替换大写字母小写的块

我真的不认为我了解什么。。。如何破译re.sub行

我认为re.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
重新导入
x=0
y=[]

而x对上述问题中的
re
的解释-

[A-Z]{2,5}$ 选项:不区分大小写;精确间距;点与换行符不匹配^$在换行时不匹配;仅限正则表达式语法

  • 在“a”和“Z”之间匹配单个字符(不区分大小写)
    [a-Z]{2,5}
    • 在2到5次之间,尽可能多次,根据需要回馈(贪婪)
      {2,5}
  • 在字符串末尾或字符串末尾的换行符(如果有)之前断言位置(换行)
    $
[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]

  • 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]*)

    您只是没有完全理解正则表达式还是没有阅读
    re.sub
    的文档?你似乎很好地理解了它的各个部分,所以我不确定问题出在哪里是好的复制/粘贴工作!!!我相信OP现在完全明白了。这看起来是直接从regex101复制的:)那么{2,5}中的5有什么意义呢?这不会给出与{2,3}相同的结果吗,因为两者在2个大写字符上仍然匹配?请参阅Op的摘录-
    它检查sent结尾是否有2-5个大写字母块
    然后是{2,3}={2,5}??我试图通过一些真实的描述来解释正则表达式,只是因为OP需要它
    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{'