RegExReplace(Clipboard, "([^\r\n])\R(?=[^\r\n])", "$1$2")
Это удалит одиночные разрывы строк, предполагая, что токен новой строки содержит либо CR
, либо LF
в конце (например, CR
, LF
, CR+LF
, LF+CR
). Он не считает пробелы пустыми.
Вашей основной проблемой было использование \R
:
\R внутри класса символов — это просто буква «R» [source ]
Решение состоит в том, чтобы использовать символы CR
и LF
напрямую.
Чтобы уточнить: под пустой строкой я подразумеваю любую строку с «белыми» символами (например, вкладки или пробелы).
RegExReplace(Clipboard, "(\S.*?)\R(?=.*?\S)", "$1")
Это то же самое, что и выше, но пробел считается пустым. Это работает, потому что он принимает все символы, кроме разрывов строк, не жадно (*?
) до первого непробельного символа как после, так и перед разрывами строк, поскольку .
по умолчанию не соответствует разрывам строк.
Предварительный просмотр используется, чтобы избежать «съедания» (сопоставления) следующего символа, который может разбиваться на односимвольных строках. Обратите внимание, что, поскольку он не соответствует, он не заменяется, и мы можем исключить его из строки замены. Смотреть назад нельзя, потому что PCRE не поддерживает просмотр назад переменной длины, поэтому вместо этого используются обычная группа захвата и обратная ссылка.
Я хотел бы заменить одиночные разрывы строк пробелами, оставив только пустые строки.
Если вы хотите заменить разрыв строки пробелами, это более уместно:
RegExReplace(Clipboard, "(\S.*?)\R(?=.*?\S)", "$1 ")
Это заменит одиночные разрывы строк пробелом.
И если вы хотите использовать просмотр назад и вперед:
Удалить одиночные разрывы строк:
RegExReplace(Clipboard, "(?<=[^\r\n\t ][^\r\n])\R(?=[^\r\n][^\r\n\t ])", "")
Замените одиночные разрывы строк пробелами:
RegExReplace(Clipboard, "(?<=[^\r\n\t ][^\r\n])\R(?=[^\r\n][^\r\n\t ])", " ")
По какой-то причине \S
не работает при просмотре назад и просмотре вперед. По крайней мере, не с моим тестированием.
person
Bob
schedule
09.06.2012