بيثون إعادة.الباطن مع العلم لا استبدال كافة تواجدات

StackOverflow https://stackoverflow.com/questions/42581

  •  09-06-2019
  •  | 
  •  

سؤال

الثعبان مستندات يقول:

re.متعدد:عند تحديد نمط شخصية '^' مباريات في بداية السلسلة و في بداية كل سطر (مباشرة بعد كل سطر جديد)...بشكل افتراضي, '^' مباريات فقط في بداية السلسلة...

ماذا يحدث عندما لا تحصل على ما يلي متوقعة النتيجة ؟

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
هل كانت مفيدة؟

المحلول

ننظر في تعريف re.sub:

sub(pattern, repl, string[, count])

4 الحجة هو العد الذي تستخدمه re.MULTILINE (وهو 8) كما أن العدد ليس كما علم.

لديك لجمع الخاصة بك باستخدام التعابير المنطقية إذا كنت ترغب في استخدام الأعلام.

re.sub(re.compile('^//', re.MULTILINE), '', s)

A flags كانت حجة وأضاف في بايثون 2.7 لذلك الكاملة التعريف هو الآن:

re.sub(pattern, repl, string[, count, flags])

مما يعني أن:

re.sub('^//', '', s, flags=re.MULTILINE)

يعمل.

نصائح أخرى

re.sub('(?m)^//', '', s)

تعريف كامل من re.sub هو:

re.sub(pattern, repl, string[, count, flags])

مما يعني أنه إذا كنت أقول بيثون ما هي المعلمات, ثم يمكنك تمرير flags دون المرور count:

re.sub('^//', '', s, flags=re.MULTILINE)

أو أكثر بشكل مقتضب:

re.sub('^//', '', s, flags=re.M)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top