Regex 命令行:在';x';字符,加上空格
我正在创建不同长度文本的测试样本,其中每个样本由一个换行符分隔。目前我有3mb+的文本文件,没有换行符,只有空格。我希望得到正确的reg表达式的帮助,以确保没有换行符将单词切成两半 我对使用reg表达式非常陌生。但我假设,对于长度为300个字符的行,它将在大致范围内的某个地方:Regex 命令行:在';x';字符,加上空格,regex,text,command,Regex,Text,Command,我正在创建不同长度文本的测试样本,其中每个样本由一个换行符分隔。目前我有3mb+的文本文件,没有换行符,只有空格。我希望得到正确的reg表达式的帮助,以确保没有换行符将单词切成两半 我对使用reg表达式非常陌生。但我假设,对于长度为300个字符的行,它将在大致范围内的某个地方: /.{300,}\s+/&\n/g (抱歉,我知道这不管用!) 注意:我知道关于这个主题也有类似的帖子,但我相对确定没有专门针对这个场景的帖子 更新:已解决!使用此命令:perl-lpe的/\b(.{803
/.{300,}\s+/&\n/g
(抱歉,我知道这不管用!)
注意:我知道关于这个主题也有类似的帖子,但我相对确定没有专门针对这个场景的帖子
更新:已解决!使用此命令:
perl-lpe的/\b(.{80300})\b/\1\n/g'文件
您确定数据中没有新行吗?(如果有,则
点字符将不匹配)如果没有换行符,可以使用如下简单方法:
s/\s(.{80,300})\s/$1\n/g
80的下限只是一个任意的选择,如果没有换行符的话,这几乎不会影响结果。如果你想要短一点的线,你可以降低300
编辑:将
\b
更改为\s
,这可能是一个更好的选择,以避免非单词字符周围出现意外的换行,正如@tchrist所指出的。另外,OP没有说他需要Perl反向引用,所以tchrist将\1
更改为$1
,这对Perl来说更有意义。您是否尝试过{1300}
?是否必须以这种方式插入新行?你的目标是什么?你可以使用带有自动换行功能的文本编辑器,如果你只想查看它,例如…是的,字符长度非常具体,我正在尝试一些基本的NLP内容并运行一些测试。谢谢,这一切都成功了!我使用了:perl-lpe的/\b(.{80300})\b/\1\n/g'file.txt>file2.txt,它工作得很好。@hmnrscs您确实应该在替换端使用$1
。另外,您可能希望使用带有\s
的空格,而不是\b
,因为否则您会感到奇怪。@tchrist:我在自己的一个3meg文件上测试了这个,没有发现任何奇怪之处。你能描述一下你的意思吗?还请注意,OP上说“解决了!使用此命令时:perl-lpe的/\b(.{80300})\b/\1\n/g
“文件”,那么您确定要将\1
更改为$1
?我不介意你编辑答案,但只要确保你是对的,当OP说我发布的答案对他有用时。@alan添加一个-w
,你就会看到。是的,我知道我是对的;诚实的奇怪的是,边界只是单词字符和非单词字符之间的过渡,而不是空间边界。这意味着像3+4=7
这样的东西可能会在加号附近断裂,但不会在等号附近断裂。这不是你通常想要的。@tchrist好吧,在这个特定的用例中,我认为打破+
是OP最不担心的。但是我想让你教我一些东西:OP没有说他在使用Perl。因此,我使用\1
作为反向参考。他说它奏效了。它为什么起作用?为什么他不必使用$1
。(我对Perl几乎一无所知。)