Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式问题!_Regex_String_Variables_Newline - Fatal编程技术网

Regex 正则表达式问题!

Regex 正则表达式问题!,regex,string,variables,newline,Regex,String,Variables,Newline,我不太熟悉正则表达式,但我知道我需要找到什么- 我有一个由换行符分隔的长数据列表,我需要删除包含字符串“(V)”的所有数据行。这些行的长度是可变的,因此我想如果其中有一个(V),那么应该在两个换行符之间选择所有内容。尝试搜索此正则表达式: ^.*\(V\).*$ 说明: ^ start of line .* any characters apart from new line \( open parenthesis (escaped to avoid special behaviour

我不太熟悉正则表达式,但我知道我需要找到什么-


我有一个由换行符分隔的长数据列表,我需要删除包含字符串“(V)”的所有数据行。这些行的长度是可变的,因此我想如果其中有一个(V),那么应该在两个换行符之间选择所有内容。

尝试搜索此正则表达式:

^.*\(V\).*$
说明:

^ start of line .* any characters apart from new line \( open parenthesis (escaped to avoid special behaviour) V V \) close parenthesis (escaped to avoid special behaviour) .* any characters apart from new line $ end of line (not strictly need here, included only for clarity) ^起跑线 *除新行以外的任何字符 \(开括号(转义以避免特殊行为) V V \)右括号(转义以避免特殊行为) *除新行以外的任何字符 $end of line(此处不严格需要,仅为清晰起见) 根据您的语言,您可能需要在正则表达式周围添加分隔符,如
/
和/或引号
,并且您可能需要启用多行模式


下面是一个在线示例,演示了它的工作原理:

如果数据确实很大,那么针对整个字符串运行一个正则表达式将是一个坏主意。相反,像下面的Perl脚本这样的简单解决方案可能适合您:

open my $fh, '<', 'data.txt' or die $!;
while (my $line = <$fh>) {
    if ($line =~ m/\(V\)/) {
        next;
    }
    print $line;
}
close $fh;

打开我的$fh,如果您有权访问此类系统,请使用UNIX命令
grep

$ grep -v '(V)' data.txt

Grep匹配data.txt中包含“(V)”的所有行,并仅显示不匹配的行(
-V
)。

您使用的语言或工具是什么?长列表有多长?它是否足够小,可以容纳几倍的可用物理内存?如果是,它不是“长”你可以在内存中很好地处理这些数据。如果没有,那么是时候使用逐行处理了。(对于某些语言,例如Perl,逐行处理最有意义。)