Regex Perl utf8换行符替换
编辑: 很抱歉看起来阿拉伯语和其他文本奇怪的换行行为完全是由于其他原因造成的。不幸的是,我在玩这个脚本的同时注意到了它Regex Perl utf8换行符替换,regex,perl,twitter,Regex,Perl,Twitter,编辑: 很抱歉看起来阿拉伯语和其他文本奇怪的换行行为完全是由于其他原因造成的。不幸的是,我在玩这个脚本的同时注意到了它 我试图在Perl中重新格式化TTYtter给出的文本字段。(来源) 该文本被定义为“状态更新的实际UTF-8文本。有关当前被视为有效字符的详细信息,请参阅。”(来自Twitter开发页面) 使用 删除并替换了newline的“英语”(西方?)文本,但对其他语言做了一些奇怪的事情。 希腊和阿拉伯文本似乎使用这种替换字符串方法添加了新行 我尝试在\p{Zl}(在CPAN perl
我试图在Perl中重新格式化TTYtter给出的文本字段。(来源) 该文本被定义为“状态更新的实际UTF-8文本。有关当前被视为有效字符的详细信息,请参阅。”(来自Twitter开发页面) 使用 删除并替换了newline的“英语”(西方?)文本,但对其他语言做了一些奇怪的事情。 希腊和阿拉伯文本似乎使用这种替换字符串方法添加了新行 我尝试在\p{Zl}(在CPAN perlunicode.pod中找到)上进行匹配,例如: 但这会在西方化的推文中留下\n条,因此与我的预期/希望不符 因此,基本上,我的问题是:如何替换utf8文本(tweet)中的所有换行/cr字符,这将适用于Perl中的西里尔文、阿拉伯语、汉字和西方内容 谢谢大家!
编辑:如果你错过了第一次编辑,读到现在,这是一个基于错误假设的问题。这不是新线剥离造成的问题。显然,这是一个与上述内容完全无关的文本换行问题。这个问题现在被标记为适度(因为我不能删除它)。
\
匹配一个反斜杠字符,因此/\\p{Z1}/
匹配一个反斜杠,然后文本字符串p{Z1}
。要匹配字符类\p{Z1}
,您需要在正则表达式的开头多加一个或少加一个反斜杠,这取决于输入是否包含反斜杠。\
匹配单个反斜杠字符,因此/\\p{Z1}/
匹配一个反斜杠,然后文本字符串p{Z1}
。要匹配字符类\p{Z1}
,您可能需要在正则表达式的开头多加一个或少加一个反斜杠,这取决于输入是否包含反斜杠。s/\\n\s*/\\/g
不会删除并替换换行符“English”(western?)文本[1],而且它不会为希腊语和阿拉伯语文本添加换行符。我不知道您使用了什么,但要替换换行符(可选地后跟空格),请在解码文本上使用以下命令:
s/\n\s*/.../g
匹配换行符\n
匹配两个字符\\n
\n
匹配U+2028行分隔符(但不是换行符)\p{Z1}
匹配6个字符\\p{Z1}
\p{Z1}
- 换行符就是换行符,不管附近有什么其他字符
utf8::decode( my $unicode_chars = $utf8_bytes );
$unicode_chars =~ s/[\r\n]/.../g;
utf8::encode( $utf8_bytes = $unicode_chars );
或者你可能在问如何替换垂直空白字符
utf8::decode( my $unicode_chars = $utf8_bytes );
$unicode_chars =~ s/\v/.../g;
utf8::encode( $utf8_bytes = $unicode_chars );
注:
s/\\n\s*/\/g
不会删除并替换换行符对“英语”(西方?)文本[1]的罚款,也不会为希腊语和阿拉伯语文本添加换行符。我不知道您使用了什么,但要替换换行符(可选地后跟空格),请在解码文本上使用以下命令:
s/\n\s*/.../g
匹配换行符\n
匹配两个字符\\n
\n
匹配U+2028行分隔符(但不是换行符)\p{Z1}
匹配6个字符\\p{Z1}
\p{Z1}
- 换行符就是换行符,不管附近有什么其他字符
utf8::decode( my $unicode_chars = $utf8_bytes );
$unicode_chars =~ s/[\r\n]/.../g;
utf8::encode( $utf8_bytes = $unicode_chars );
或者你可能在问如何替换垂直空白字符
utf8::decode( my $unicode_chars = $utf8_bytes );
$unicode_chars =~ s/\v/.../g;
utf8::encode( $utf8_bytes = $unicode_chars );
注:
啊。显然,这是关闭它的一种方法。请参阅原始版本中的“编辑”。显然这是一个换行问题,与去掉换行无关。Ahhh。显然,这是关闭它的一种方法。请参阅原始版本中的“编辑”。显然,这是一个换行问题,与去掉新行无关。哎哟。我在这里的第一个问题,我打错了。哎哟。我在这里的第一个问题,当我键入它时,我设法弄错了。
s/\\n\s*/\/g代码>删除换行符(并替换为“\”)。有关阿拉伯语渲染问题的问题,请参见编辑。“\p{Z1}匹配U+2028行分隔符(但不是换行符)”位很有用$txtin已经是unicode字符了。@Fluffkin,不,它没有(除非它们跟一个反斜杠换行符(这也会被删除))@Fluffkin,比较perl-e“$\\\=chr(0x0A);s/\\n/newline/g;printf qq{%v02X\n},$\\\\/code>和perl-e“$\=chr(0x0A);s/\n/newline/g;printf qq{%v02X\n},$\
。(在unix上更改为“”)在我前面的评论中应该是“反斜杠'n'”,而不是“反斜杠换行符”。查看屏幕输出。在这种情况下是这样的。结果表明,新换行符的阿拉伯文文本等来自换行功能(在剥离原始序列后应用)。甚至文本::Wrap似乎也不能解决这个问题。s/\\n\s*/\\/g;
确实去掉了换行符(并替换为“\”)。请参阅编辑以了解阿拉伯语渲染问题的错误。“\p{Z1}匹配U+2028行分隔符(但不是换行符)”位很有用。$txtin已经是unicode字符。@Fluffkin,不,它不是(除非它们遵循反斜杠换行符(也会被删除))@Fluffkin,比较<