سؤال

هل هناك وظيفة مكتبة عبر المنصة من شأنها أن تنهي سلسلة متعددة في سلسلة سطر واحد مع عدم وجود مسافات متكررة؟

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

def collapse(input):
    import re
    rn = re.compile(r'(\r\n)+')
    r = re.compile(r'\r+')
    n = re.compile(r'\n+')
    s = re.compile(r'\ +')
    return s.sub(' ',n.sub(' ',r.sub(' ',rn.sub(' ',input))))

PS شكرا على الملاحظات الجيدة. ' '.join(input.split()) يبدو أن الفائز لأنه يعمل بالفعل بشكل أسرع في حالتي مقارنة بالبحث استبدال مع r'\s+' regex.

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

المحلول

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

' '.join(my_string.split())

إليك برنامج نصي اختبار كامل:

TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

print ' '.join(TEST.split())
# Prints:
# This is a test with a mix of tabs, newlines and repeating whitespace

نصائح أخرى

كان لديك الفكرة الصحيحة، كنت بحاجة فقط لقراءة دليل Python عن كثب:

import re
somewhitespace = re.compile(r'\s+')
TEST = """This
is        a test\twith a
  mix of\ttabs,     newlines and repeating
whitespace"""

somewhitespace.sub(' ', TEST)

'This is a test with a mix of tabs, newlines and repeating whitespace'
multi_line.replace('\n', '')

سوف تفعل الوظيفة. '\n' هو نهاية عالمية لشخصية الخط في بيثون.

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