Python正規式サンプルコード

reモジュールは、Python言語にすべての通常の式関数を持たせます。

使用される構文

通常の文字 解釈
+ 前の要素は少なくとも1回出現します ab +:ab、abbbbなど
* 前の要素が0回以上出現する ab *:a、ab、abbなど
? 前の1回または0回一致 Ab?:A、Abなど
^ 開始タグとして ^ a:abc、aaaaaaなど
$ 終了タグとして c $:abc、ccccなど
\ d 番号 3、4、9およびその他の通常の文字解釈の例+前の要素が少なくとも1回出現するab +:ab、abbbbなど。*前の要素が0回以上出現するab *:a、ab、abbなど?前の要素と一致するか、 0 Ab?:A、Abなど^開始タグとして^ a:abc、aaaaaaなど。$終了タグとしてc $:abc、ccccなど。\ d番号3、4、9など\ D非番号A、a、-など。 [az] Aとzの間の任意の文字a、p、mなど[0-9] 0から9までの任意の数字0、2、9など
通常の文字 解釈
+ 前の要素は少なくとも1回出現します ab +:ab、abbbbなど
* 前の要素が0回以上出現する ab *:a、ab、abbなど
? 前の1回または0回一致 Ab?:A、Abなど
^ 開始タグとして ^ a:abc、aaaaaaなど
$ 終了タグとして c $:abc、ccccなど
\ d 数字 3、4、9など
\ D 非番号 A、a、-など
[ az] Aとzの間の任意の文字 a、p、mなど
[0- 9] 0 9 0、2、9などまでの任意の数
\ D 非番号 A、a、-など
[ az] Aとzの間の任意の文字 a、p、mなど
[0- 9] 0 9 0、2、9などまでの任意の数

注意:

  1. エスケープキャラクター
 s
'( abc)def'
 m = re.search("(\(.*\)).*", s)
 print m.group(1)(abc)

re.match関数

re.matchは、文字列の先頭からパターンを照合しようとします。最初に照合が成功しなかった場合、match()はnoneを返します。

例1:

#! /usr/bin/python
# - *- coding: UTF-8-*-import re
print(re.match('www','www.zalou.cn').span()) #開始時に一致
print(re.match('net','www.zalou.cn'))     #最初は一致しません

出力結果:

(0, 3)
None

例2:

#! /usr/bin/python
import re
 
line ="Cats are smarter than dogs"
 
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:
 print "matchObj.group() : ", matchObj.group()
 print "matchObj.group(1) : ", matchObj.group(1)
 print "matchObj.group(2) : ", matchObj.group(2)else:
 print "No match!!"

出力結果:

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

上記はpython2の印刷出力です。pythonに()を追加することを忘れないでください。pythonの出力は、取得したコンテンツと一致するように他の言語の\ nと同様です。

python group()

通常の式では、group()を使用してグループ化によってインターセプトされた文字列を提案し、()を使用してグループ化します。

前の文字列を複数回繰り返します

 a ="kdlal123dk345"
 b ="kdlal123345"
 m = re.search("([0-9]+(dk){0,1})[0-9]+", a)
 m.group(1), m.group(2)('123dk','dk')
 m = re.search("([0-9]+(dk){0,1})[0-9]+", b)
 m.group(1)'12334'
 m.group(2)

理由

  1. 正規式の3セットの括弧は、マッチング結果を3つのグループに分割します

group()はgroup(0)と同じで、通常の式の全体的な結果と一致します。
group(1)は最初のブラケット一致部分をリストし、group(2)は2番目のブラケット一致部分をリストし、group(3)は3番目のブラケット一致部分をリストします。
2. 成功した一致がない場合、re.search()はNoneを返します

  1. もちろん、通常の式には括弧はなく、group(1)は間違いなく間違っています。

  1. 文字列がすべて小文字かどうかを判断します
# - *- coding: cp936 -*-import re 
s1 ='adkkdk'
s2 ='abc123efg'

an = re.search('^[a-z]+$', s1)if an:
 print 's1:', an.group(),'すべて小文字'else:
 print s1,"すべてが小文字ではありません!"

an = re.match('[a-z]+$', s2)if an:
 print 's2:', an.group(),'すべて小文字'else:
 print s2,"すべてが小文字ではありません!"

結果

理由

  1. 通常の式はpythonの一部ではありません。使用する場合は、reモジュールを引用する必要があります。

  2. 一致する形式は、re.search(通常の式、一致する文字列)またはre.match(通常の式、一致する文字列)です。 2つの違いは、後者はデフォルトで開始文字(^)で始まることです。したがって、

re.search( '^ [az] +'、s1)はre.match( '[a-z] +'、s2)と同等です

  1. 一致が失敗した場合、a = re.search( '^ [az] + $'、s1)はNoneを返します

groupは、一致する結果をグループ化するために使用されます

例えば

import re
a ="123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)  #123abc456,全体に戻る
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)  #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)  #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)  #456

出力結果

123 abc456
123
abc
456

1 )正規式の3セットの括弧は、マッチング結果を3つのグループに分割します

group()はgroup(0)と同じで、通常の式の全体的な結果と一致します。

group(1)は最初のブラケット一致部分をリストし、group(2)は2番目のブラケット一致部分をリストし、group(3)は3番目のブラケット一致部分をリストします。

2 )一致するものがない場合、re.search()はNoneを返します

3 )もちろん、通常の式には括弧はなく、group(1)は間違いなく間違っています。

2. 頭字語の拡張

具体例

FEMA Federal Emergency Management Agency
IRA Irish Republican Army
DUP Democratic Unionist Party

FDA Food and Drug Administration
OLC Office of Legal Counsel
分析

略語FEMA
F *** E *** M *** A ***に分解
通常の大文字+小文字(1以上)+スペース

参照コード

import re
def expand_abbr(sen, abbr):
 lenabbr =len(abbr)
 ma =''for i inrange(0, lenabbr):
 ma += abbr[i]+"[a-z]+"+' '
 print 'ma:', ma
 ma = ma.strip(' ')
 p = re.search(ma, sen)if p:return p.group()else:return''

print expand_abbr("Welcome to Algriculture Bank China",'ABC')

結果

問題

上記のコードは、例の最初の3つについては正しいですが、大文字で始まる単語も小文字の単語と混合されているため、後の2つは間違っています。

法律

大文字+小文字(1以上)+スペース+ [小文字+スペース](0次或1次)

参照コード

import re
def expand_abbr(sen, abbr):
 lenabbr =len(abbr)
 ma =''for i inrange(0, lenabbr-1):
 ma += abbr[i]+"[a-z]+"+' '+'([a-z]+ )?'
 ma += abbr[lenabbr-1]+"[a-z]+"
 print 'ma:', ma
 ma = ma.strip(' ')
 p = re.search(ma, sen)if p:return p.group()else:return''

print expand_abbr("Welcome to Algriculture Bank of China",'ABC')

スキル

中央の小文字のセット+スペースは、全体として、括弧を追加します。同時にまたは同時にではないので、それを使用する必要がありますか? 、先に全体を合わせるために。

3. 番号のコンマを削除

具体例

自然言語を扱う場合、123,000,000を句読点で割ると問題が発生します。適切な数値はコンマで区切られているため、最初に数値を処理できます(カンマを削除します)。

分析

多くの場合、番号は3つの番号のグループであり、その後にコンマが続くため、ルールは***、***、***です。

正規表現

[ a-z]+,[a-z]?

参照コード3-1

import re

sen ="abc,123,456,789,mnp"
p = re.compile("\d+,\d+?")for com in p.finditer(sen):
 mm = com.group()
 print "hi:", mm
 print "sen_before:", sen
 sen = sen.replace(mm, mm.replace(",",""))
 print "sen_back:", sen,'\n'

結果

スキル

関数finditer(string [、pos [、endpos]])| re.finditer(pattern、string [、flags])を使用します。

文字列を検索し、各一致結果(Matchオブジェクト)に順番にアクセスするイテレーターを返します。

参照コード3-2

sen ="abc,123,456,789,mnp"while1:
 mm = re.search("\d,\d", sen)if mm:
 mm = mm.group()
 sen = sen.replace(mm, mm.replace(",",""))
 print sen
 else:break

結果

拡張する

このようなプログラムは、特定の問題、つまり3桁のグループを対象としています。数字が文字と混在している場合は、数字の間のコンマを削除します。つまり、「abc、123,4,789、mnp」を「abc、1234789、mnp」に変換します。

アイデア

具体的には、「number、number」という正規表現を見つけて、削除したコンマに置き換えます。

参照コード3-3

sen ="abc,123,4,789,mnp"while1:
 mm = re.search("\d,\d", sen)if mm:
 mm = mm.group()
 sen = sen.replace(mm, mm.replace(",",""))
 print sen
 else:break
print sen

結果

4. 中国の処理の年換算(例:1949-1949)

中国の処理にはコーディングの問題が含まれます。たとえば、以下のプログラムが年(****年)を認識する場合

# - *- coding: cp936 -*-import re
m0 ="ニューチャイナは1949年に設立されました"
m1 ="1990年より5.2%低い"
m2 ='男は1996年にロシア軍を破った,実質的な独立を達成'

def fuc(m):
 a = re.findall("[ゼロ|1|二|三|四|ファイブ|6|セブン|8|ナイン]+年", m)if a:for key in a:
  print key
 else:
 print "NULL"fuc(m0)fuc(m1)fuc(m2)

運用結果

2番目と3番目にエラーがあることがわかります。

改善-ユニコード認識への標準化

# - *- coding: cp936 -*-import re
m0 ="ニューチャイナは1949年に設立されました"
m1 ="1990年より5.2%低い"
m2 ='男は1996年にロシア軍を破った,実質的な独立を達成'

def fuc(m):
 m = m.decode('cp936')
 a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", m)if a:for key in a:
  print key
 else:
 print "NULL"fuc(m0)fuc(m1)fuc(m2)

結果

漢字を数字に置き換えることで認識できます。

参照

numHash ={}
numHash['ゼロ'.decode('utf-8')]='0'
numHash['1'.decode('utf-8')]='1'
numHash['二'.decode('utf-8')]='2'
numHash['三'.decode('utf-8')]='3'
numHash['四'.decode('utf-8')]='4'
numHash['ファイブ'.decode('utf-8')]='5'
numHash['6'.decode('utf-8')]='6'
numHash['セブン'.decode('utf-8')]='7'
numHash['8'.decode('utf-8')]='8'
numHash['ナイン'.decode('utf-8')]='9'

def change2num(words):
 print "words:",words
 newword =''for key in words:
 print key
 if key in numHash:
  newword += numHash[key]else:
  newword += key
 return newword

def Chi2Num(line):
 a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", line)if a:
 print "------"
 print line
 for words in a:
  newwords =change2num(words)
  print words
  print newwords
  line = line.replace(words, newwords)return line

**5. | **で区切られた複数の携帯電話番号

例えば:

ヌル値
12222222222
12222222222|12222222222
12222222222|12222222222|12222222444

表現

s = “[\d]{11}(\|[\d]{11})*|”

4.推奨

Python正規表現ガイド

これまでのところ、python正規式のサンプルコードに関するこの記事を紹介します。より関連性の高いpython正規式のサンプルコンテンツについては、ZaLou.Cnで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLou.Cnをさらにサポートしていただければ幸いです。

Recommended Posts

Python正規式サンプルコード
Pythonの正規表現学習の小さな例
python_正規式学習
Python正規表現クイックラーニング
PythonATM関数の実装コード例
Pythontcp伝送コードの例の分析
Pythonリクエストモジュールセッションコード例
Python検証コード傍受識別コードの例
Pythonオブジェクト指向の例
Python3.7デバッグサンプルメソッド
PythonSMS爆撃コード
Python補間補間の例
バグを見つけるためのPythonコード(2)
バグを見つけるためのPythonコード(7)
pythonコードにコメントする方法
バグを見つけるためのPythonコード(4)
バグを見つけるためのPythonコード(3)
バグを見つけるためのPythonコード(9)
Python描画ローズ実装コード
Pythonの負の弾性率の操作例
Pythonはコードブロックフォールディングを実装します
Python出力数学記号の例
PythonインストールOpenCVサンプルコード
バグを見つけるためのPythonコード(6)
Python反復可能オブジェクトの重複排除の例
バグを見つけるためのPythonコード(1)
バグを見つけるためのPythonコード(8)
Pythonは検証コード認識を実装します
バグを見つけるためのPythonコード(5)
Python一次元二次元補間の例
pythonコードは大文字と小文字を区別しますか
Pythonドローバーグラフ(バーグラフ)の例
Pythonの右揃えの例の方法
Pythontelnetログイン関数の実装コード
pythonウェブページコードの表示方法
情報エントロピーの例のPython計算
Pythonウォーターフォールラインインジケーターの作成例
Pythonリスト理解操作例の概要
Pythonはクロスプラットフォームの言語コードです
IV値を計算するPythonの例
Pythonデコレータの簡単な使用例の概要
グレーレベルの同時発生マトリックス(Pythonコードを使用)
pythonアクセスAlipayの操作例
Pythonは実行する操作コードを処理します
CythonでPythonコードを高速化