كل شيء عن استخدام التعبيرات العادية في calibre

التعبيرات العادية هي ميزات تستخدم في العديد من الأماكن في calibre لإجراء معالجة متطورة لمحتوى الكتب الإلكترونية وبياناتها الوصفية. هذا الدليل التعليمي هو مقدمة لطيفة لمساعدتك على البدء في استخدام التعبيرات العادية في calibre.

أولاً، كلمة تحذير وكلمة تشجيع

هذا، حتمًا، سيكون تقنيًا إلى حد ما - ففي النهاية، التعبيرات العادية هي أداة تقنية للقيام بأشياء تقنية. سأضطر إلى استخدام بعض المصطلحات والمفاهيم التي قد تبدو معقدة أو ملتوية. سأحاول شرح هذه المفاهيم بأكبر قدر ممكن من الوضوح، ولكن لا يمكنني الاستغناء عن استخدامها على الإطلاق. ومع ذلك، لا تيأس من أي مصطلحات، فقد حاولت شرح كل شيء جديد. وبينما قد تبدو التعبيرات العادية نفسها وكأنها سحر غامض أسود (أو، بشكل أكثر بساطة، سلسلة عشوائية من الحروف والعلامات الغريبة)، أعدك بأنها ليست معقدة إلى هذا الحد. حتى أولئك الذين يفهمون التعبيرات العادية جيدًا يواجهون صعوبة في قراءة الأكثر تعقيدًا، ولكن كتابتها ليست صعبة - أنت تبني التعبير خطوة بخطوة. لذا، اتخذ خطوة واتبعني إلى وكر الأرنب.

أين يمكنك استخدام التعبيرات العادية في calibre؟

هناك بعض الأماكن التي يستخدم فيها calibre التعبيرات العادية. هناك البحث والاستبدال في خيارات التحويل، اكتشاف البيانات الوصفية من أسماء الملفات في إعدادات الاستيراد، والبحث والاستبدال عند تحرير البيانات الوصفية للكتب بكميات كبيرة. يمكن لمحرر كتب calibre أيضًا استخدام التعبيرات العادية في ميزة البحث والاستبدال. أخيرًا، يمكنك استخدام التعبيرات العادية عند البحث في قائمة كتب calibre وعند البحث داخل عارض الكتب الإلكترونية في calibre.

ماذا تكون التعبير العادي بحق السماء؟

التعبير العادي هو طريقة لوصف مجموعات من السلاسل. يمكن لتعبير عادي واحد مطابقة عدد من السلاسل المختلفة. هذا ما يجعل التعبير العادي قويًا جدًا -- فهو طريقة موجزة لوصف عدد كبير محتمل من الاختلافات.

ملاحظة

أستخدم كلمة 'سلسلة' هنا بالمعنى المستخدم في لغات البرمجة: سلسلة من حرف واحد أو أكثر، بما في ذلك الأحرف الفعلية، الأرقام، علامات الترقيم، وما يسمى بالمسافات البيضاء (فواصل الأسطر، علامات الجدولة، إلخ). يرجى ملاحظة أنه بشكل عام، لا تعتبر الأحرف الكبيرة والصغيرة متماثلة، وبالتالي فإن "a" حرف مختلف عن "A" وهكذا. في calibre، التعبيرات العادية غير حساسة لحالة الأحرف في شريط البحث، ولكنها حساسة في خيارات التحويل. هناك طريقة لجعل كل تعبير عادي غير حساس لحالة الأحرف، ولكننا سنناقش ذلك لاحقًا. يصبح الأمر معقدًا لأن التعبيرات العادية تسمح بالتنوع في السلاسل التي تطابقها، لذا يمكن لتعبير واحد أن يطابق سلاسل متعددة، وهذا هو سبب اهتمام الناس باستخدامها على الإطلاق. المزيد عن ذلك لاحقًا.

هل تمانع في الشرح؟

حسنًا، لهذا نحن هنا. أولاً، هذا هو المفهوم الأكثر أهمية في التعبيرات العادية: السلسلة بحد ذاتها هي تعبير عادي يطابق نفسها. أي، إذا أردت مطابقة السلسلة "Hello, World!" باستخدام تعبير عادي، فإن التعبير العادي الذي يجب استخدامه سيكون Hello, World!. ونعم، الأمر بهذه البساطة حقًا. ستلاحظ، مع ذلك، أن هذا يطابق فقط السلسلة الدقيقة "Hello, World!"، وليس على سبيل المثال "Hello, wOrld!" أو "hello, world!" أو أي تنوع آخر من هذا القبيل.

لا يبدو ذلك سيئًا للغاية. ماذا بعد ذلك؟

التالي هو بداية الأشياء الجيدة حقًا. هل تتذكر عندما قلت أن التعبيرات العادية يمكن أن تطابق سلاسل متعددة؟ هنا يصبح الأمر أكثر تعقيدًا بعض الشيء. لنفترض، كتمرين عملي إلى حد ما، أن الكتاب الإلكتروني الذي أردت تحويله يحتوي على تذييل سيء يحسب الصفحات، مثل "الصفحة 5 من 423". من الواضح أن رقم الصفحة سيرتفع من 1 إلى 423، وبالتالي سيتعين عليك مطابقة 423 سلسلة مختلفة، أليس كذلك؟ خطأ، في الواقع: التعبيرات العادية تسمح لك بتحديد مجموعات من الأحرف التي يتم مطابقتها: لتحديد مجموعة، تضع جميع الأحرف التي تريد أن تكون في المجموعة بين قوسين مربعين. لذا، على سبيل المثال، المجموعة [abc] ستطابق إما الحرف "a" أو "b" أو "c". ستطابق المجموعات دائمًا حرفًا واحدًا فقط من الأحرف في المجموعة. إنها "تفهم" نطاقات الأحرف، أي، إذا أردت مطابقة جميع الأحرف الصغيرة، فستستخدم المجموعة [a-z] للأحرف الصغيرة والكبيرة ستستخدم [a-zA-Z] وهكذا. هل فهمت الفكرة؟ لذا، من الواضح، باستخدام التعبير Page [0-9] of 423 ستتمكن من مطابقة الصفحات التسع الأولى، وبالتالي تقليل التعبيرات المطلوبة إلى ثلاثة: التعبير الثاني Page [0-9][0-9] of 423 سيطابق جميع أرقام الصفحات المكونة من رقمين، وأنا متأكد من أنك تستطيع تخمين كيف سيبدو التعبير الثالث. نعم، تفضل. اكتبه.

يا له من رائع! هذا بدأ يصبح منطقيًا!

كنت آمل أن تقول ذلك. ولكن استعد، الآن يصبح الأمر أفضل! لقد رأينا للتو أنه باستخدام المجموعات، يمكننا مطابقة حرف واحد من عدة أحرف في وقت واحد. ولكن يمكنك حتى تكرار حرف أو مجموعة، مما يقلل عدد التعبيرات اللازمة للتعامل مع مثال رقم الصفحة أعلاه إلى واحد. نعم، واحد! متحمس؟ يجب أن تكون! يعمل الأمر كالتالي: بعض الأحرف الخاصة، "+"، "؟" و "*"، تكرر العنصر الفردي الذي يسبقها. (العنصر يعني إما حرفًا واحدًا، مجموعة أحرف، تسلسل هروب أو مجموعة (سنتعلم عن هذين الأخيرين لاحقًا) - باختصار، أي كيان واحد في تعبير عادي). تسمى هذه الأحرف أحرف البدل أو المحددات الكمية. لكي نكون أكثر دقة، "؟" تطابق 0 أو 1 من العنصر السابق، "*" تطابق 0 أو أكثر من العنصر السابق و "+" تطابق 1 أو أكثر من العنصر السابق. بعض الأمثلة: التعبير a? سيطابق إما "" (وهي السلسلة الفارغة، ليست مفيدة تمامًا في هذه الحالة) أو "a"، التعبير a* سيطابق ""، "a"، "aa" أو أي عدد من الحروف 'a' متتالية، وأخيرًا، التعبير a+ سيطابق "a"، "aa" أو أي عدد من الحروف 'a' متتالية (ملاحظة: لن يطابق السلسلة الفارغة!). نفس الشيء للمجموعات: التعبير [0-9]+ سيطابق كل عدد صحيح موجود! أعرف ما تفكر فيه، وأنت محق: إذا استخدمت ذلك في الحالة المذكورة أعلاه لـ مطابقة أرقام الصفحات، ألن يكون هذا التعبير الوحيد لمطابقة جميع أرقام الصفحات؟ نعم، التعبير Page [0-9]+ of 423 سيطابق كل رقم صفحة في هذا الكتاب!

ملاحظة

ملاحظة حول هذه المحددات الكمية: إنها تحاول عمومًا مطابقة أكبر قدر ممكن من النص، لذا كن حذرًا عند استخدامها. يسمى هذا "السلوك الجشع" - أنا متأكد من أنك تفهم السبب. يصبح الأمر مشكلة عندما تحاول، على سبيل المثال، مطابقة وسم. لنأخذ على سبيل المثال السلسلة "<p class="calibre2">العنوان هنا</p>" ولنفترض أنك تريد مطابقة الوسم الافتتاحي (الجزء بين الزوج الأول من الأقواس الزاوية، المزيد عن الوسوم لاحقًا). قد تعتقد أن التعبير <p.*> سيطابق هذا الوسم، ولكن في الواقع، يطابق السلسلة بأكملها! (الحرف "." هو حرف خاص آخر. يطابق أي شيء باستثناء فواصل الأسطر، لذلك، بشكل أساسي، التعبير .* سيطابق أي سطر واحد يمكنك التفكير فيه). بدلاً من ذلك، حاول استخدام <p.*?> الذي يجعل المحدد الكمي "*" غير جشع. سيطابق هذا التعبير الوسم الافتتاحي الأول فقط، كما هو مقصود. هناك في الواقع طريقة أخرى لتحقيق ذلك: التعبير <p[^>]*> سيطابق نفس الوسم الافتتاحي - سترى لماذا بعد القسم التالي. فقط لاحظ أنه غالبًا ما توجد أكثر من طريقة لكتابة تعبير عادي.

حسنًا، هذه الأحرف الخاصة أنيقة جدًا وكل شيء، ولكن ماذا لو أردت مطابقة نقطة أو علامة استفهام؟

بالطبع يمكنك فعل ذلك: ما عليك سوى وضع شرطة مائلة عكسية أمام أي حرف خاص وسيتم تفسيره كحرف حرفي، بدون أي معنى خاص. هذا الزوج من الشرطة المائلة العكسية متبوعًا بحرف واحد يسمى تسلسل الهروب، وعملية وضع شرطة مائلة عكسية أمام حرف خاص تسمى الهروب من هذا الحرف. يتم تفسير تسلسل الهروب كعنصر واحد. هناك بالطبع تسلسلات هروب تقوم بأكثر من مجرد الهروب من الأحرف الخاصة، على سبيل المثال "\t" يعني علامة جدولة. سنتطرق إلى بعض تسلسلات الهروب لاحقًا. أوه، وبالمناسبة، فيما يتعلق بهذه الأحرف الخاصة: اعتبر أي حرف نناقشه في هذه المقدمة على أنه له وظيفة خاصة وبالتالي يحتاج إلى الهروب إذا كنت تريد الحرف الحرفي.

إذن، ما هي المجموعات الأكثر فائدة؟

كنت أعلم أنك ستسأل. بعض المجموعات المفيدة هي [0-9] لمطابقة رقم واحد، [a-z] لمطابقة حرف صغير واحد، [A-Z] لمطابقة حرف كبير واحد، [a-zA-Z] لمطابقة حرف واحد و [a-zA-Z0-9] لمطابقة حرف أو رقم واحد. يمكنك أيضًا استخدام تسلسل هروب كاختصار:

\d

يكافئ [0-9]

\w

يكافئ [a-zA-Z0-9_]

\s

يكافئ أي مسافة بيضاء

ملاحظة

"المسافة البيضاء" هو مصطلح لأي شيء لن يتم طباعته. هذه الأحرف تشمل المسافة، علامة الجدولة، تغذية السطر، تغذية النموذج، عودة المؤشر، المسافات غير الفاصلة، إلخ.

ملاحظة

قد تطابق مجموعات الأحرف الكبيرة والصغيرة كليهما إذا كان إعداد جعل عمليات البحث غير حساسة لحالة الأحرف ممكّنًا. توجد هذه الإعدادات، على سبيل المثال، في التفضيلات->البحث في calibre نفسه وفي لوحة البحث في عارض الكتب الإلكترونية E-book viewer في calibre وكذلك في أداة تحرير الكتاب في calibre.

كملاحظة أخيرة حول المجموعات، يمكنك أيضًا تعريف مجموعة على أنها أي حرف باستثناء تلك الموجودة في المجموعة. يمكنك القيام بذلك عن طريق تضمين الحرف "^" كـ أول حرف في المجموعة. وبالتالي، فإن [^a] ستطابق أي حرف باستثناء "a". يسمى هذا تكملة المجموعة. يمكن أيضًا تكملة اختصارات تسلسل الهروب التي رأيناها سابقًا: "\D" تعني أي حرف غير رقمي، وبالتالي تكون مكافئة لـ [^0-9]. يمكن تكملة الاختصارات الأخرى، كما خمنت، باستخدام الحرف الكبير المقابل بدلاً من الحرف الصغير. لذا، بالعودة إلى المثال <p[^>]*> من القسم السابق، يمكنك الآن رؤية أن مجموعة الأحرف التي تستخدمها تحاول مطابقة أي حرف باستثناء قوس زاوية إغلاق.

ولكن إذا كان لدي بعض السلاسل المتغيرة التي أردت مطابقتها، فهل تصبح الأمور معقدة؟

لا تخف، الحياة لا تزال جيدة وسهلة. لنأخذ هذا المثال: الكتاب الذي تقوم بتحويله يحتوي على "العنوان" مكتوبًا في كل صفحة فردية و"المؤلف" مكتوبًا في كل صفحة زوجية. يبدو رائعًا في الطباعة، أليس كذلك؟ ولكن في الكتب الإلكترونية، إنه مزعج. يمكنك تجميع تعبيرات كاملة بين قوسين عاديين، والحرف "|" سيسمح لك بمطابقة إما التعبير على يمينه أو التعبير على يساره. اجمع هذين الأمرين وقد انتهيت. سريع جدًا بالنسبة لك؟ حسنًا، أولاً، نقوم بتجميع التعبيرات للصفحات الفردية والزوجية، وبالتالي نحصل على (Title)(Author) كتعبيرين مطلوبين. الآن نجعل الأمور أبسط باستخدام الخط العمودي ("|" يسمى حرف الخط العمودي): إذا استخدمت التعبير (Title|Author) فستحصل إما على مطابقة لـ "Title" (في الصفحات الفردية) أو ستطابق "Author" (في الصفحات الزوجية). ألم يكن ذلك سهلاً؟

يمكنك، بالطبع، استخدام الخط العمودي دون استخدام أقواس التجميع، أيضًا. هل تتذكر عندما قلت أن المحددات الكمية تكرر العنصر الذي يسبقها؟ حسنًا، يعمل الخط العمودي بشكل مختلف قليلاً: التعبير "Title|Author" سيطابق أيضًا إما السلسلة "Title" أو السلسلة "Author"، تمامًا مثل المثال أعلاه الذي يستخدم التجميع. يختار الخط العمودي بين التعبير بأكمله الذي يسبقه والذي يليه. لذا، إذا أردت مطابقة السلاسل "Calibre" و "calibre" وأردت تحديد فقط بين الأحرف الكبيرة والصغيرة "c"، فسيتعين عليك استخدام التعبير (c|C)alibre، حيث يضمن التجميع أن "c" فقط سيتم تحديدها. إذا كنت ستستخدم c|Calibre، فستحصل على مطابقة على السلسلة "c" أو على السلسلة "Calibre"، وهو ليس ما أردناه. باختصار: إذا كنت في شك، استخدم التجميع مع الخط العمودي.

لقد فاتك...

... انتظر دقيقة واحدة، هناك شيء أخير ورائع حقًا يمكنك فعله باستخدام المجموعات. إذا كان لديك مجموعة طابقتها سابقًا، يمكنك استخدام مراجع لتلك المجموعة لاحقًا في التعبير: يتم ترقيم المجموعات بدءًا من 1، وتُشير إليها عن طريق الهروب من رقم المجموعة التي تريد الإشارة إليها، وبالتالي، سيتم الإشارة إلى المجموعة الخامسة كـ \5. لذا، إذا بحثت عن ([^ ]+) \1 في السلسلة "Test Test"، فستطابق السلسلة بأكملها!

في البداية، قلت أن هناك طريقة لجعل التعبير العادي غير حساس لحالة الأحرف؟

نعم، فعلت ذلك، شكرًا لانتباهك وتذكيري. يمكنك إخبار calibre كيف تريد التعامل مع بعض الأمور باستخدام ما يسمى بالأعلام. تضمين الأعلام في تعبيرك باستخدام البناء الخاص (?flags go here) حيث، من الواضح، ستستبدل "flags go here" بـ الأعلام المحددة التي تريدها. لتجاهل حالة الأحرف، العلم هو i، وبالتالي تضمين (?i) في تعبيرك. وبالتالي، (?i)test سيطابق "Test"، "tEst"، "TEst" وأي اختلاف في حالة الأحرف يمكنك التفكير فيه.

علم مفيد آخر يسمح للنقطة بمطابقة أي حرف على الإطلاق، بما في ذلك السطر الجديد، وهو العلم s. إذا كنت تريد استخدام عدة أعلام في تعبير واحد، فما عليك سوى وضعها في نفس العبارة: (?is) سيتجاهل حالة الأحرف ويجعل النقطة تطابق كل شيء. لا يهم أي علم تذكره أولاً، (?si) سيكون مكافئًا لما سبق.

أعتقد أنني بدأت أفهم هذه التعبيرات العادية الآن... كيف أستخدمها في calibre؟

التحويلات

لنبدأ بإعدادات التحويل، وهي رائعة حقًا. في جزء البحث والاستبدال، يمكنك إدخال تعبير نمطي (اختصار للتعبير العادي) يصف السلسلة التي سيتم استبدالها أثناء التحويل. الجزء الرائع هو المعالج. انقر على عصا المعالج وستحصل على معاينة لما يراه calibre أثناء عملية التحويل. قم بالتمرير إلى السلسلة التي تريد إزالتها، حددها وانسخها، الصقها في حقل التعبير النمطي في أعلى النافذة. إذا كانت هناك أجزاء متغيرة، مثل أرقام الصفحات أو ما شابه، استخدم المجموعات والمحددات الكمية لتغطية تلك الأجزاء، وبينما تقوم بذلك، تذكر أن تهرب الأحرف الخاصة، إذا كانت موجودة. انقر على الزر المسمى اختبار وسيقوم calibre بتمييز الأجزاء التي سيستبدلها إذا استخدمت التعبير النمطي. بمجرد أن تكون راضيًا، انقر على موافق وحول. كن حذرًا إذا كان مصدر التحويل الخاص بك يحتوي على وسوم مثل هذا المثال:

Maybe, but the cops feel like you do, Anita. What's one more dead vampire?
New laws don't change that. </p>
<p class="calibre4"> <b class="calibre2">Generated by ABC Amber LIT Conv
<a href="http://www.processtext.com/abclit.html" class="calibre3">erter,
http://www.processtext.com/abclit.html</a></b></p>
<p class="calibre4"> It had only been two years since Addison v. Clark.
The court case gave us a revised version of what life was

(مقتبس بلا خجل من هذا الموضوع). سيتعين عليك إزالة بعض الوسوم أيضًا. في هذا المثال، أوصي بالبدء بالوسم <b class="calibre2">، الآن يجب أن تنتهي بـ الوسم الإغلاقي المقابل (الوسوم الافتتاحية هي <tag>، الوسوم الإغلاقية هي </tag>)، وهو ببساطة </b> التالي في هذه الحالة. (ارجع إلى دليل HTML جيد أو اسأل في المنتدى إذا كنت غير واضح بشأن هذه النقطة). يمكن وصف الوسم الافتتاحي باستخدام <b.*?>، والوسم الإغلاقي باستخدام </b>، وبالتالي يمكننا إزالة كل شيء بين هذه الوسوم باستخدام <b.*?>.*?</b>. ولكن استخدام هذا التعبير سيكون فكرة سيئة، لأنه يزيل كل شيء محاط بوسوم <b> (والتي، بالمناسبة، تعرض النص المحاط بخط عريض)، ومن المحتمل جدًا أننا سنزيل أجزاء من الكتاب بهذه الطريقة. بدلاً من ذلك، قم بتضمين بداية السلسلة المحاطة أيضًا، مما يجعل التعبير العادي <b.*?>\s*Generated\s+by\s+ABC\s+Amber\s+LIT.*?</b> يتم تضمين \s مع المحددات الكمية هنا بدلاً من استخدام المسافات صراحةً كما هو موضح في السلسلة لالتقاط أي اختلافات في السلسلة قد تحدث. تذكر التحقق مما سيزيله calibre للتأكد من أنك لا تزيل أي أجزاء تريد الاحتفاظ بها إذا اختبرت تعبيرًا جديدًا. إذا قمت بالتحقق من حدوث واحد فقط، فقد تفوتك عدم تطابق في مكان آخر في النص. لاحظ أيضًا أنه إذا قمت عن طريق الخطأ بإزالة عدد أكبر أو أقل من الوسوم مما أردت بالفعل، يحاول calibre إصلاح الكود التالف بعد إجراء الإزالة.

إضافة كتب

شيء آخر يمكنك استخدام التعبيرات العادية من أجله هو استخراج البيانات الوصفية من أسماء الملفات. يمكنك العثور على هذه الميزة في جزء "إضافة كتب" من الإعدادات. هناك ميزة خاصة هنا: يمكنك استخدام أسماء الحقول لـ حقول البيانات الوصفية، على سبيل المثال (?P<title>) سيشير إلى أن calibre يستخدم هذا الجزء من السلسلة كعنوان كتاب. أسماء الحقول المسموح بها مدرجة في النوافذ، جنبًا إلى جنب مع حقل اختبار آخر لطيف. مثال: لنفترض أنك تريد استيراد مجموعة كاملة من الملفات المسماة مثل Classical Texts: The Divine Comedy by Dante Alighieri.mobi. (من الواضح أن هذا موجود بالفعل في مكتبتك، حيث أننا جميعًا نحب الشعر الإيطالي الكلاسيكي) أو Science Fiction epics: The Foundation Trilogy by Isaac Asimov.epub. هذا من الواضح أنه نظام تسمية لن يستخرج calibre منه أي بيانات ذات معنى - تعبيره القياسي لاستخراج البيانات الوصفية هو (?P<title>.+) - (?P<author>[^_]+). التعبير العادي الذي يعمل هنا سيكون [a-zA-Z]+: (?P<title>.+) by (?P<author>.+). يرجى ملاحظة أنه، داخل المجموعة الخاصة بحقل البيانات الوصفية، تحتاج إلى استخدام تعبيرات لوصف ما يطابقه الحقل فعليًا. ولاحظ أيضًا أنه، عند استخدام حقل الاختبار الذي يوفره calibre، تحتاج إلى إضافة امتداد الملف إلى اسم ملف الاختبار الخاص بك، وإلا فلن تحصل على أي مطابقات على الإطلاق، على الرغم من استخدام تعبير يعمل.

تحرير البيانات الوصفية بكميات كبيرة

الجزء الأخير هو البحث والاستبدال باستخدام التعبيرات العادية في حقول البيانات الوصفية. يمكنك الوصول إلى هذه الميزة عن طريق تحديد عدة كتب في المكتبة واستخدام تحرير البيانات الوصفية بالجملة. كن حذرًا جدًا عند استخدام هذه الميزة الأخيرة، حيث يمكنها أن تفعل أشياء سيئة للغاية لمكتبتك! تحقق مرتين من أن تعبيراتك تفعل ما تريده باستخدام حقول الاختبار، وحدد فقط الكتب التي تريد تغييرها حقًا! في وضع البحث بالتعبير العادي، يمكنك البحث في حقل واحد، واستبدال النص بشيء ما، وحتى كتابة النتيجة في حقل آخر. مثال عملي: لنفترض أن مكتبتك تحتوي على كتب سلسلة Dune لفرانك هربرت، المسماة على النحو التالي: Dune 1 - Dune، Dune 2 - Dune Messiah وهكذا. الآن تريد الحصول على Dune في حقل السلسلة. يمكنك القيام بذلك عن طريق البحث عن (.*?) \d+ - .* في حقل العنوان واستبداله بـ \1 في حقل السلسلة. هل رأيت ما فعلته هناك؟ هذا مرجع إلى المجموعة الأولى التي تستبدل بها حقل السلسلة. الآن بعد أن أصبحت السلسلة جاهزة، ما عليك سوى إجراء بحث آخر عن .*? - في حقل العنوان واستبداله بـ "" (سلسلة فارغة)، مرة أخرى في حقل العنوان، وستكون بياناتك الوصفية كلها مرتبة ومنظمة. أليس هذا رائعًا؟ بالمناسبة، بدلاً من استبدال الحقل بأكمله، يمكنك أيضًا إلحاق أو إضافة إلى الحقل، لذا، إذا أردت أن يتم إلحاق عنوان الكتاب بمعلومات السلسلة، يمكنك القيام بذلك أيضًا. كما لاحظت الآن بلا شك، هناك مربع اختيار مسمى حساس لحالة الأحرف، لذلك لن تضطر إلى استخدام الأعلام لتحديد السلوك هنا.

حسنًا، هذا يختتم المقدمة القصيرة جدًا للتعبيرات العادية. آمل أن أكون قد أظهرت لك ما يكفي على الأقل لتبدأ وتمكنك من مواصلة التعلم بنفسك - نقطة بداية جيدة ستكون وثائق بايثون للتعبيرات العادية.

كلمة تحذير أخيرة، مع ذلك: التعبيرات العادية قوية، ولكنها أيضًا سهلة جدًا لارتكاب الأخطاء. يوفر calibre إمكانيات اختبار رائعة حقًا لمعرفة ما إذا تعبيراتك تتصرف كما تتوقع منها. استخدمها. حاول ألا تطلق النار على قدمك. (يا إلهي، أحب هذا التعبير...). ولكن إذا قمت بذلك، على الرغم من التحذير، وأصبت قدمك (أو أي أجزاء أخرى من الجسم)، حاول التعلم منها.

مرجع سريع

الشكر والتقدير

شكراً للمساعدة بالنصائح والتصحيحات وما إلى ذلك:

  • ldolse

  • kovidgoyal

  • chaley

  • dwanthny

  • kacir

  • Starson17

  • Orpheu

لمزيد من المعلومات حول التعبيرات العادية، راجع دليل مستخدم بايثون. مكتبة التعبيرات العادية الفعلية المستخدمة بواسطة calibre هي: regex والتي تدعم العديد من التحسينات المفيدة على مكتبة بايثون القياسية.