Python regex للعثور على محتويات روابط ترميز MediaWiki

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

  •  03-07-2019
  •  | 
  •  

سؤال

إذا كان لدي ملف XML يحتوي على أشياء مثل علامة mediawiki التالية:

"... تم جمعه في القرن الثاني عشر ، والذي كان [الإسكندر العظيم] هو البطل ، والذي كان يمثله ، مثل البريطانيين [[الملك آرثر | آرثر]]

ما هي الحجج المناسبة لشيء مثل:

re.findall([[__?__]], article_entry)

أتعثر قليلاً في الهروب من الأقواس المربعة المزدوجة، والحصول على الرابط المناسب للنص مثل: [[Alexander of Paris|poet named Alexander]]

هل كانت مفيدة؟

المحلول

وهنا مثال

import re

pattern = re.compile(r"\[\[([\w \|]+)\]\]")
text = "blah blah [[Alexander of Paris|poet named Alexander]] bldfkas"
results = pattern.findall(text)

output = []
for link in results:
    output.append(link.split("|")[0])

# outputs ['Alexander of Paris']

والإصدار 2، يضع أكثر في التعبير المعتاد، ولكن نتيجة لذلك، بتغيير الإخراج:

import re

pattern = re.compile(r"\[\[([\w ]+)(\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)

# outputs [('a', '|b'), ('c', '|d'), ('efg', '')]

print [link[0] for link in results]

# outputs ['a', 'c', 'efg']

والإصدار 3، إذا كنت ترغب فقط الارتباط دون عنوان.

pattern = re.compile(r"\[\[([\w ]+)(?:\|[\w ]+)?\]\]")
text = "[[a|b]] fdkjf [[c|d]] fjdsj [[efg]]"
results = pattern.findall(text)

# outputs ['a', 'c', 'efg']

نصائح أخرى

التعبير العادي: \w+( \w+)+(?=]])

مدخل

[[إسكندر باريس|شاعر اسمه ألكسندر]]

انتاج

شاعر اسمه ألكسندر

مدخل

[[إسكندر باريس]]

انتاج

ألكسندر باريس

import re
pattern = re.compile(r"\[\[([\w ]+)(?:\||\]\])")
text = "of which [[Alexander the Great]] was somewhat like [[King Arthur|Arthur]]"
results = pattern.findall(text)
print results

هل تعطي الناتج

["Alexander the Great", "King Arthur"]

إذا كنت تحاول الحصول على جميع الروابط من صفحة، وبطبيعة الحال انه من الاسهل بكثير لاستخدام API ميدياويكي إذا كان ذلك ممكنا، على سبيل المثال http://en.wikipedia.org/ ث / api.php؟ عمل = الاستعلام ودعامة = الروابط والعناوين = Stack_Overflow_ (الموقع) .

لاحظ أن كلا هذه الأساليب يغيب الروابط جزءا لا يتجزأ من القوالب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top