perl - Perl,按特定模式拆分字符串
问题描述
我发现了如何用空格分割字符串,但这只考虑了一个字符。就我而言,我将注释粘贴到包含换行符和空格的文件中。我用这个字符串分隔它们:[|]
所以我需要将我的 $string 拆分为一个数组,例如,其中 $string =
This is a comment.
This is a newline.
This is the end[|]This is second comment.
This is second newline.
[|]Last comment
被拆分为包含换行符和空格的 $array[0]、$array[1] 和 $array[2]。用 [|] 分隔
我在网上找到的每个示例都使用单个字符(例如空格或换行符)来拆分字符串。在我的情况下,我必须使用更具体的标识符,这就是为什么我选择 [|] 但在拆分它时遇到了麻烦。
我试图将其限制为通过单个“|”进行解析 带有此代码的字符:
my @words = split /|/, $string;
foreach my $thisline (@words) {
print "This line = '" . $thisline . "'\n";
但这似乎将整个字符串逐个字符拆分为@words。
解决方案
[
, |
, 和]
都是正则表达式中的特殊字符——|
用于分隔选项,[…]
用于指定字符集。使用不带引号|
的表达式使表达式匹配空字符串(更具体地说:空字符串或空字符串),使其在每个字符边界上匹配和拆分。必须对这些字符进行转义才能在表达式中按字面意思使用它们:
my @words = split /\[\|\]/, $string;
由于所有的行都使这在视觉上令人困惑,您可能应该使用m{}
引号而不是//
, 并\Q…\E
引用一系列字符而不是每个字符的单独反斜杠。(这在功能上是相同的,只是更容易阅读。)
my @words = split m{\Q[|]\E}, $string;
推荐阅读
- javascript - 停止创建的计时器并保存时间
- python - 查询数据框以在熊猫中创建新数据框
- model-view-controller - 身份服务器4:为什么我在调用授权控制器时收到“找不到签名密钥”
- omnet++ - 如何在 Veins 4.7.1 中配置双 802.11p 无线电
- javascript - 消息通知
- java - 我可以通过在子类中包含父类以递归方式反序列化 json 吗?
- c - 打印pid和errno
- swift - 可选类型“浮点数?”的值 必须解包为“Float”类型的值
- ios - 未调用 DidRefreshRegistrationToken,即使在卸载/安装之后也是如此。如何在 xamarin IOS 中获取已生成的 firebase 令牌,
- c# - youtube使用c#中的rest api上传问题?