我有一个类似
的文件这是一条从上面继续的线.......
这是我想要匹配的行......
这是我想要匹配的另一条线....
这是我想要匹配的另一条线....
这是一些常规文字。 Blah ......
继续上面的常规文本......
我想在空白行之前和之后“紧凑”行。喜欢这个
这是我要匹配的行....... 这是我想要匹配的另一条线。
这是我想要匹配的另一条线....这是一些常规文字。 Blah ......
继续上面的常规文本
我尝试使用
匹配换行符之前和之后的行 re.findall(r'\n\n[\w ]+\n\n')
但失败了。有什么建议吗?
答案 0 :(得分:4)
PCRE在Python中不可用,因此您必须使用以下内容:
/(?=\r?\n|\x0b|\f|\r|\x85)(\r?\n|\x0b|\f|\r|\x85)(.+(\r?\n|\x0b|\f|\r|\x85))(?=\r?\n|\x0b|\f|\r|\x85)/g
Python现场演示:http://regex101.com/r/xL8bF1(有关复杂的换行符,请参阅pcrepattern specification)
PCRE正则表达式应该做你想要的:
/(?=\R)\R(.+\R)(?=\R)/g
PCRE(PHP)现场演示:http://regex101.com/r/aO8yA7
PS:在regex101上使用可视化空白功能,以便更好地理解替换结果。
答案 1 :(得分:1)
在@ Fleshgrinder的优秀方法基础上进行所需的替换:
re.sub(r'(?=\n)\n(.+)\n(?=\n)', r'\1\n', inputString)
如果您还需要使用包含\r\n
行结尾的输入:
re.sub(r'(?=\r?\n)\r?\n(.+)(\r?\n)(?=\r?\n)', r'\1\2', inputString)
假设Unix系统和名为in.txt
的输入文件,您可以从命令行测试它,如下所示:
python -c \
"import re,sys; print re.sub(r'(?=\n)\n(.+)\n(?=\n)', r'\1\n', sys.argv[1])" \
"$(<in.txt)"
答案 2 :(得分:0)
使用Perl的简单解决方案(假设有问题的文件名为“in.txt”) -
perl -e 'undef $/; while ($file=<>) {$file=~s/\n\n(.*)(\n\n)/\n$1\n/g; print $file}' in.txt
基本上,在Perl中将整个文件作为单个字符串读入,然后将Perl中的替换函数应用于整个字符串。
(注意 - 我假设这是一个Unix系统。你可能想根据@Fleshgrinder的回答为Windows机器添加额外的可选检查回车。)