regular expresson for Unix and Dos Lineendings wanted

Franz Steinhaeusler franz.steinhaeusler at gmx.at
Thu Feb 23 09:59:54 EST 2006


On 23 Feb 2006 06:44:36 -0800, "gene tani" <gene.tani at gmail.com> wrote:

>
>gene tani wrote:
>> Franz Steinhaeusler wrote:
>> >
>> > Who can help me (regular expression, which works for both cases).
>>
>> universal newlines:
>> http://www.python.org/doc/2.3.3/whatsnew/node7.html
>> http://mail.python.org/pipermail/python-list/2006-February/324410.html
>
>if multiple end-of line markers are present (\r, \r\n and or \n), use
>the file's newlines attribute to see what they are.  I think the thread
>linked above touched on that.  Otherwise newlines (or os.linesep)
>should tell you what end of line is in that file.
>
>http://docs.python.org/lib/bltin-file-objects.html

Thank you for your info.

I need it for a file, whose line endings I don't know.

I wrote for DrPython this script:
(using styled text control and wxPython) and this works,
but I'm looking for a shorter way:

===================================================================
#drscript
#RemoveTrailingWhitespaces

import re
import string

eol = DrDocument.GetEndOfLineCharacter()
regex = re.compile('\s+' + eol, re.MULTILINE)

relewin = re.compile('\r\n', re.M)
releunix = re.compile('[^\r]\n', re.M)
relemac = re.compile('\r[^\n]', re.M)

text = DrDocument.GetText()

#check line endings
win = unix = mac = 0
if relewin.search(text):
	win = 1
if releunix.search(text):
	unix = 1
if relemac.search(text):
	mac = 1
mixed = win + unix + mac

#correct the lineendings before
if mixed > 1:
	wx.MessageDialog(DrFrame, "Line endings mixed", "Remove trailing
Whitespace", wx.ICON_EXCLAMATION).ShowModal()

#ok to remove
else:
	lines = text.split(eol)
	new_lines = []
	nr_lines = 0
	nr_clines = 0
	first_cline = -1
	for line in lines:
		nr_lines += 1
		result = regex.search(line + eol)
		if result != None:
			end = result.start()
			nr_clines += 1
			if first_cline == -1:
				first_cline = nr_lines
			new_lines.append (line [:end])
		else:
			new_lines.append(line)

	#file has trailing whitespaces
	if nr_clines > 0:
		d = wx.MessageDialog(DrFrame, "%d of %d lines have trailing
whitespaces (First:%d)\nCorrect?" % (nr_clines, nr_lines, first_cline),
\
			"Remove trailing Whitespace", wx.OK | wx.CANCEL |
wx.ICON_QUESTION)
		answer = d.ShowModal()
		d.Destroy()
		if (answer == wx.ID_OK):
			newtext = string.join(new_lines, eol)
			#save current line
			curline = DrDocument.GetCurrentLine()
			DrDocument.SetText(newtext)
			#jump to saved current line
			DrDocument.GotoLine(curline)

	#no need to change the file
	else:
		wx.MessageDialog(DrFrame, "File ok!", "Remove trailing Whitespace",
wx.ICON_EXCLAMATION).ShowModal()

===========================================================================
-- 
Franz Steinhaeusler



More information about the Python-list mailing list