python اكواد لغة - بايثون: سلسلة انقسام مع محددات متعددة




3 Answers

لحسن الحظ ، بيثون لديها هذا المدمج في :)

import re
re.split('; |, ',str)

تحديث:
بعد تعليقك:

>>> a='Beautiful, is; better*than\nugly'
>>> import re
>>> re.split('; |, |\*|\n',a)
['Beautiful', 'is', 'better', 'than', 'ugly']
جاهزة تطبيقات

هذا السؤال لديه بالفعل إجابة هنا:

لقد وجدت بعض الإجابات عبر الإنترنت ، ولكن ليس لدي أي خبرة في التعبيرات العادية ، والتي أعتقد أنها ضرورية هنا.

لدي سلسلة يجب تقسيمها إما بعلامة "؛" أو "،" أي ، يجب أن تكون إما فاصلة منقوطة أو فاصلة متبوعة بمسافة. يجب ترك الفواصل الفردية دون مسافات زائدة دون مساس

سلسلة المثال:

"b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3], mesitylene [000108-67-8]; polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]"

يجب تقسيمها إلى قائمة تحتوي على ما يلي:

('b-staged divinylsiloxane-bis-benzocyclobutene [124221-30-3]' , 'mesitylene [000108-67-8]', 'polymerized 1,2-dihydro-2,2,4- trimethyl quinoline [026780-96-1]') 



فيما يلي طريقة آمنة لأي من المتطفلين ، باستخدام التعبيرات العادية:

>>> import re
>>> delimiters = "a", "...", "(c)"
>>> example = " (c) is awesome... isn't it?"
>>> regexPattern = '|'.join(map(re.escape, delimiters))
>>> regexPattern
'a|\\.\\.\\.|\\(c\\)'
>>> re.split(regexPattern, example)
['st', 'ckoverflow ', ' is ', 'wesome', " isn't it?"]

re.escape يسمح ببناء النمط تلقائيا و قد نجا المحددات بشكل جيد.

إليك هذا الحل كدالة لمتعة اللصق الخاص بك:

def split(delimiters, string, maxsplit=0):
    import re
    regexPattern = '|'.join(map(re.escape, delimiters))
    return re.split(regexPattern, string, maxsplit)

إذا كنت ستقسم غالبًا باستخدام نفس المحددات ، RegexObject.split بتجميع تعبيرك المعتاد مسبقًا مثل وصف واستخدام RegexObject.split .




هذه هي الطريقة التي تبدو بها شعاع التعبير العادي:

import re
# "semicolon or (a comma followed by a space)"
pattern = re.compile(r";|, ")

# "(semicolon or a comma) followed by a space"
pattern = re.compile(r"[;,] ")

print pattern.split(text)



Related