regular expression شرح python




بايثون string.replace التعبير العادي (3)

هذا السؤال لديه بالفعل إجابة هنا:

لدي ملف معلمة من النموذج

parameter-name parameter-value

حيث يمكن أن تكون المعلمات بأي ترتيب ولكن هناك معلمة واحدة فقط لكل سطر. أرغب في استبدال قيمة المعلمة - معلمة واحدة بقيمة جديدة.

أستخدم سطرًا استبدل الدالة التي تم نشرها سابقًا ( ابحث واستبدل سطرًا في ملف في Python ) ليحل محل الخط الذي يستخدم string.replace الخاص بـ python (النمط ، string.replace ). التعبير العادي الذي أستخدمه يعمل على سبيل المثال في vim ولكن لا يبدو أنه يعمل في string.replace. في ما يلي التعبير العادي الذي أستخدمه:

line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))

حيث interfaceOpDataFile هو اسم المعلمة الذي سأقوم باستبداله (/ i لحالة الأحرف) وقيمة المعلمة الجديدة هي محتويات متغير fileIn. هل هناك طريقة للحصول على ثعبان ليتعرف على هذا التعبير العادي أم أن هناك طريقة أخرى لإنجاز هذه المهمة؟ شكرا مقدما.


كملخص

import sys
import re

f = sys.argv[1]
find = sys.argv[2]
replace = sys.argv[3]
with open (f, "r") as myfile:
     s=myfile.read()
ret = re.sub(find,replace, s)   # <<< This is where the magic happens
print ret

كنت تبحث عن وظيفة re.sub .

import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print replaced 

سوف يطبع axample atring


str.replace() v2 | v3 لا يتعرف على التعبيرات العادية.

لإجراء استبدال باستخدام تعبير عادي ، استخدم re.sub() v2 | v3 .

فمثلا:

import re

line = re.sub(
           r"(?i)^.*interfaceOpDataFile.*$", 
           "interfaceOpDataFile %s" % fileIn, 
           line
       )

في حلقة ، سيكون من الأفضل تجميع التعبير العادي أولاً:

import re

regex = re.compile(r"^.*interfaceOpDataFile.*$", re.IGNORECASE)
for line in some_file:
    line = regex.sub("interfaceOpDataFile %s" % fileIn, line)
    # do something with the updated line




regex