【问题标题】:Regex question!正则表达式问题!
【发布时间】:2011-02-06 18:28:26
【问题描述】:

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

我有一长串由换行符分隔的数据,我需要删除所有包含字符串“(V)”的数据行。这些行的长度是可变的,所以如果里面有 (V),我猜想这与选择两个换行符之间的所有内容有关?

【问题讨论】:

  • 您使用什么语言或工具?
  • “长名单”有多长?它是否足够小,可以多次放入可用的物理内存中?如果是这样,它不是“长”的,你可以很好地处理内存中的很多。如果没有,是时候使用逐行处理了。 (对于某些语言,例如 Perl,无论如何,逐行是最有意义的。)

标签: regex string variables newline


【解决方案1】:

尝试搜索这个正则表达式:

^.*\(V\).*$

解释:

^ 行首 .* 除换行符外的任何字符 \( 左括号(转义以避免特殊行为) 五五 \) 右括号(转义以避免特殊行为) .* 除换行符外的任何字符 $ 行尾(此处不严格需要,仅用于清楚起见)

根据您的语言,您可能需要在正则表达式周围添加分隔符,例如 / 和/或引号 ",并且您可能需要启用多行模式。

这是一个在线示例,显示它的工作原理:Rubular

【讨论】:

    【解决方案2】:

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

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

    此脚本一次读取一行数据文件,并将不包含“(V)”的行打印到标准输出。 (您显然可以用不同的数据处理任务替换“打印”)

    【讨论】:

      【解决方案3】:

      如果您有权访问此类系统,请使用 UNIX 命令 grep

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-25
        相关资源
        最近更新 更多