regular expression شرح python
بايثون string.replace التعبير العادي (3)
كملخص
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
هذا السؤال لديه بالفعل إجابة هنا:
لدي ملف معلمة من النموذج
parameter-name parameter-value
حيث يمكن أن تكون المعلمات بأي ترتيب ولكن هناك معلمة واحدة فقط لكل سطر. أرغب في استبدال قيمة المعلمة - معلمة واحدة بقيمة جديدة.
أستخدم سطرًا استبدل الدالة التي تم نشرها سابقًا ( ابحث واستبدل سطرًا في ملف في Python ) ليحل محل الخط الذي يستخدم string.replace الخاص بـ python (النمط ، string.replace ). التعبير العادي الذي أستخدمه يعمل على سبيل المثال في vim ولكن لا يبدو أنه يعمل في string.replace. في ما يلي التعبير العادي الذي أستخدمه:
line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))
حيث interfaceOpDataFile هو اسم المعلمة الذي سأقوم باستبداله (/ i لحالة الأحرف) وقيمة المعلمة الجديدة هي محتويات متغير fileIn. هل هناك طريقة للحصول على ثعبان ليتعرف على هذا التعبير العادي أم أن هناك طريقة أخرى لإنجاز هذه المهمة؟ شكرا مقدما.
كنت تبحث عن وظيفة 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