Pythonは正規表現を使って特定の数字などの位置と他の使い方を取得します

2801 ワード

操作手順を記録し、コードをひっくり返したり、コピーしたりするのがおっくうです.
1.文字列の最初の数値の開始終了位置を取得します.
例えば、asd 2312 ssa 213 sda
import re
content =content.replace(" ","")
model = re.compile("[0-9]+")
if model.search(content) is not None:
   pos = model.search(content).span()
   return int(content[pos[0]:pos[1]])

フィードバック:2312
[0-9]+:一致する数字の先頭が数字でない子文字になるまで、+が欲張りであることを示す
 
2.文字列内のすべての数値を取得
一致するすべての数値リストを取得するのは簡単です.
content ="1uhi2uhi2h2ih3uh4"
model = re.compile("[0-9]+")
retlist = model.findall(content)
print retlist

フィードバックは['1','2','2','2','3','4']である. 
3.一致変数名
変数は数字にアルファベットと下線で構成できますsd_1など、その特定の変数の位置は、正規のコードから取得されません.
要件:すべての作成変数を一致させ、名前を変更します.
CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;
AAA11 :=2;AAA:= 4;

例えば、一致AAA変数をBBBに変更する
コードは次のとおりです.
remodel5 = re.compile(r"\WAAA(?:\s)*:=(?:\s)*\w+")
list5 = remodel5.findall(mycon)
if len(list5) >0:
  for i in list5:
      xxx
      print i

コードが乱れている可能性があります.以上の一致結果は次のとおりです.
,AAA:= Q2
.AAA:=Q2
;AAA:= 4

W:アルファベットとアンダースコア(s)*任意のスペースw+アルファベットのアンダースコアからなる文字列ではありません.C変数フォーマットに一致する場合は「
[a-zA-Z_]\w*


pythonのreplace関数を使用してループ置換すればいいです.ただしreを使用すると.sub()はより簡単になります.
import re
str1 = "CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAA:= 4;"
str2 = re.sub(r"(\bAAA\b)",r"\1BBB",str1)
print str1
print str2

CONTINUOUSUPDATE := 2.3,AAA:= Q2, OUTAAA => Q2);Q1.AAA:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAA:= 4;
CONTINUOUSUPDATE := 2.3,AAABBB:= Q2, OUTAAA => Q2);Q1.AAABBB:=Q2;Q2 := Q1.OUTAXIS;AAA11 :=2;AAABBB:= 4;

注意re.sub()の「1」の役割は、最初の正規パラメータの各々が括弧()で囲まれた内容である.
4.文字列分割split
文字列を分割する目的がある、re.splitは自然になりました.
基本的な使い方:
>>> s= "qweqwabqwesabfefweabtewgfsabsda"
>>> ret = re.split("ab",s)
>>> ret
['qweqw', 'qwes', 'fefwe', 'tewgfs', 'sda']

例のabを分割子として複数のリスト文字列に分けることができる. 
一致するデータの一部を保持します.
['qweqw', 'qwes', 'fefwe', 'tewgfs', 'sda']
>>> ret = re.split("a(b)",s)
>>> ret
['qweqw', 'b', 'qwes', 'b', 'fefwe', 'b', 'tewgfs', 'b', 'sda']

ここではカッコを使用して、返されるリストに単独で文字列として書き込むことができます. 
注意点:
1.pythonコードで()を使用するには、?:になって()を使用する必要があります.そうしないとlist 5には2つのスペース要素があります.
2.マッチング小数点を使用する場合は[],すなわち[.]を付ける必要があります一致する小数点を表す.複数の文字を一致させることができます.