gpt4 book ai didi

regex - 在 Perl 中,如何删除不在双引号 ""内的所有空格?

转载 作者:行者123 更新时间:2023-12-01 09:04:39 24 4
gpt4 key购买 nike

我想提出一些正则表达式,只要它不在双引号 (") 内,它就会从字符串中删除所有空格字符。

示例字符串:

一些带有“引号中的文字”的字符串

结果:

somestringwith"引号中的文字"

到目前为止,我想出了这样的事情:

    $str =~ /"[^"]+"|/g;

但它似乎没有给出预期的结果。

老实说,我是 perl 的新手,并没有太多的正则表达式经验。因此,如果有人愿意回答,也愿意提供一些关于为什么以及如何做到这一点的见解!

谢谢!

编辑

字符串不会包含转义的 "'s

它实际上应该总是这样格式化:

Some.String = "一些值"

结果是

Some.String="Some Value"

最佳答案

这是一种使用 split 来分隔带引号的字符串的技术。它依赖于您的数据是一致的,并且不适用于松散的引号。

use strict;
use warnings;

my @line = split /("[^"]*")/;
for (@line) {
unless (/^"/) {
s/[ \t]+//g;
}
}
print @line; # line is altered

基本上,您拆分字符串是为了隔离引用的字符串。完成后,对所有其他字符串执行替换。由于数组元素在循环中具有别名,因此对实际数组执行替换。

你可以像这样运行这个脚本:

perl -n script.pl inputfile

查看输出。或者

perl -n -i.bak script.pl inputfile

inputfile 上进行就地编辑,同时将备份保存在 inputfile.bak 中。

话虽如此,我不确定您的编辑是什么意思。你想改变吗

Some.String = "Some Value"

Some.String="Some Value"

关于regex - 在 Perl 中,如何删除不在双引号 ""内的所有空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com