我经常从PDF或类似文件中复制文本,换行符不是我想要的方式。我希望每个段落都是一行文本,段落之间有一个空行,而不是每个段落中有很多短行。
感谢此处的其他答案,我可以通过几个步骤解决这个问题:
[\r\n][\r\n]
,并将其替换为占位符字符串-------placeholder--------
。别担心,占位符会回到段落之间的空间。[\r\n]
。-------placeholder--------
[\r\n][\r\n]
但我很好奇:有没有办法用更少的步骤做到这一点?例如,在正则表达式中是否可以说“查找所有换行符,除了换行符对,并替换为空”?这将消除占位符步骤的需要。
答案 0 :(得分:1)
是的,可以用一个正则表达式来做到这一点 方法是找到由换行符分隔的两个字母。
例:
这是第.\nT
段中的第一句话,他是第二句。
这是第二段。
有意义吗?
这有两个版本。使用非换行空白修剪
没有修剪。
# Trimming:
# Find: (?<=\S)[^\S\r\n]*\r\n[^\S\r\n]*(?=\S)
# Replace ' '
(?<= \S )
[^\S\r\n]* \r \n [^\S\r\n]*
(?= \S )
和
# Non-Trimming
# Find: (\S[^\S\r\n]*)\r\n([^\S\r\n]*\S)
# Replace: '$1 $2'
( \S [^\S\r\n]* ) # (1)
\r \n
( [^\S\r\n]* \S ) # (2)
答案 1 :(得分:0)
好的,我可以告诉你它如何仅适用于\n
在C#中:
var input = "test\ntest2\n\ntest3\ntest4";
var regex = @"\n(?:(?=[^\n])(?<=[^\n]\n))";
var s2 = Regex.Replace(input,regex, "");
Console.WriteLine(s2);
结果:
testtest2
test3test4
而且我认为我是为\r\n
得到的 - 但要彻底测试它;)
var input = "test\r\ntest2\r\n\r\ntest3\r\ntest4";
var regex = @"(?<!\r\n)\r\n(?!\r\n)";
var s2 = Regex.Replace(input,regex, "");
Console.WriteLine(s2);
结果:
testtest2
test3test4