python - example - regular expression شرح




بيثون ريجيكسيس غير الجشع (4)

كيف يمكنني جعل التعبير الثعبان مثل "(. *)" بحيث، بالنظر إلى "ب (ج) (د) ه" يطابق الثعبان "ب" بدلا من "ب) ج (د"؟

أعرف أنني أستطيع استخدام "[^]]" بدلا من "."، ولكني أبحث عن حل أكثر عمومية يحافظ على تعبيري المعتاد قليلا. هل هناك أي طريقة لقول الثعبان "مهلا، تطابق هذا في أقرب وقت ممكن"؟


هل تريد أن تطابق "(ب)"؟ كما اقترح زيتراكس وباولو. هل تريد أن تطابق "ب"؟ فعل

>>> x = "a (b) c (d) e"
>>> re.search(r"\((.*?)\)", x).group(1)
'b'

>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'

ووفقا للمستندات :

و ' * '، ' + '، و ' ? "التصفيات كلها الجشع. فإنها تطابق أكبر قدر ممكن من النص. في بعض الأحيان هذا السلوك غير المرغوب فيه. إذا تمت مطابقة ري <.*> مع <H1>title</H1> '، فستطابق السلسلة بأكملها، وليس فقط' <H1> '. إضافة ' ? "بعد التصفيات يجعل من أداء المباراة في غير الجشع أو الحد الأدنى من الأزياء؛ سيتم مطابقة عدد قليل من الشخصيات قدر الإمكان. استخدام .*? في التعبير السابق سوف تطابق فقط ' <H1> '.


كما قال آخرون استخدام؟ معدل على * كوانتيفيه سوف يحل مشكلتك على الفور، ولكن كن حذرا، كنت بدأت في الضالة في المناطق التي توقف ريجكسيس العمل وتحتاج إلى محلل بدلا من ذلك. على سبيل المثال، السلسلة "(فو (بار)) باز" سوف يسبب لك مشاكل.






regex-greedy