理解python分隔符中的正则表达式,sub,

时间:2015-11-05 03:58:38

标签: python regex

我正在尝试理解模式匹配,并且对下面的代码非常不满。从我可以告诉它检查,看看在发送结束时是否有一大块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

1 个答案:

答案 0 :(得分:1)

上述问题中re的说明 -

[A-Z] {2,5-} $

[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]+之间范围内的单个字符
    • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+
  • 将字符“。”字面匹配\.
  • 匹配“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抓取group 1([a-zA-Z_][a-zA-Z_0-9]*)

的位置