python regex

python regex

#python

1.check valid

import re

def main():
    username = input('please input username:')
    qq = input('please input qq:')

    m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
    if not m1:
        print('please input valid username')

    m2 = re.match(r'^[1-9]\d{4,11}$', qq)
    if not m2:
        print('please input valid qq')

    if m1 and m2:
        print('input is valid')

if __name__ == '__main__':
    main()

2. find phone number

import re


def main():
    pattern = re.compile(r'(?<=\D)1[34578]\d{9}(?=\D)')
    sentence = 'my phone is 13056248933 not 15625486587.'

    # find all
    mylist = re.findall(pattern, sentence)
    print(mylist)

    print('----------------')
    # find by iterate
    for temp in pattern.finditer(sentence):
        print(temp.group())

    print('----------------')
    # find by search
    m = pattern.search(sentence)
    while m:
        print(m.group())
        m = pattern.search(sentence, m.end())


if __name__ == '__main__':
    main()

3.replace dirty words

import re


def main():
    sentence = 'fuck you, thank you'
    purified = re.sub('fuck|shit', '*', sentence, flags=re.IGNORECASE)
    print(purified)


if __name__ == '__main__':
    main()

4.split sentence

import re


def main():
    poem = 'Hello, my name is xxx. nice to need you'
    sentence_list = re.split(r'[,。, .]', poem)
    while '' in sentence_list:
        sentence_list.remove('')
    print(sentence_list)


if __name__ == '__main__':
    main()
符號 解釋 示例 說明
. 匹配任意字符 b.t 可以匹配bat / but / b#t / b1t等
\w 匹配字母/數字/下劃線 b\wt 可以匹配bat / b1t / b_t等
但不能匹配b#t
\s 匹配空白字符(包括\r、\n、\t等) love\syou 可以匹配love you
\d 匹配數字 \d\d 可以匹配01 / 23 / 99等
\b 匹配單詞的邊界 \bThe\b
^ 匹配字符串的開始 ^The 可以匹配The開頭的字符串
$ 匹配字符串的結束 .exe$ 可以匹配.exe結尾的字符串
\W 匹配非字母/數字/下劃線 b\Wt 可以匹配b#t / b@t等
但不能匹配but / b1t / b_t等
\S 匹配非空白字符 love\Syou 可以匹配love#you等
但不能匹配love you
\D 匹配非數字 \d\D 可以匹配9a / 3# / 0F等
\B 匹配非單詞邊界 \Bio\B
[] 匹配來自字符集的任意單一字符 [aeiou] 可以匹配任一元音字母字符
[^] 匹配不在字符集中的任意單一字符 [^aeiou] 可以匹配任一非元音字母字符
* 匹配0次或多次 \w*
+ 匹配1次或多次 \w+
? 匹配0次或1次 \w?
{N} 匹配N次 \w{3}
{M,} 匹配至少M次 \w{3,}
{M,N} 匹配至少M次至多N次 \w{3,6}
| 分支 foo|bar 可以匹配foo或者bar
(?#) 註釋
(exp) 匹配exp並捕獲到自動命名的組中
(? <name>exp) 匹配exp並捕獲到名爲name的組中
(?:exp) 匹配exp但是不捕獲匹配的文本
(?=exp) 匹配exp前面的位置 \b\w+(?=ing) 可以匹配I’m dancing中的danc
(?<=exp) 匹配exp後面的位置 (?<=\bdanc)\w+\b 可以匹配I love dancing and reading中的第一個ing
(?!exp) 匹配後面不是exp的位置
(?<!exp) 匹配前面不是exp的位置
*? 重複任意次,但儘可能少重複 a.*b
a.*?b
將正則表達式應用於aabab,前者會匹配整個字符串aabab,後者會匹配aab和ab兩個字符串
+? 重複1次或多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{M,N}? 重複M到N次,但儘可能少重複
{M,}? 重複M次以上,但儘可能少重複
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章