匹配分隔符后的行和短于9的行

时间:2016-01-01 17:40:36

标签: regex notepad++ regex-negation

我和正则表达从不相处 我每天都会收到主管发来的电子邮件 包含大约1000多行需要排序 它像:

名称|代码

目标是将它们分成2个文件

示例:

  • Garry Cooper | abc123h1n1
  • Andy Morray | abcd
  • John Travolta | 123567
  • Simon Person | ABCD1

我做什么

我照顾|字符 我删除整行: 如果代码仅包含数字 和/或仅包含字母 和/或短于9

示例列表变为:

Garry Cooper | abc123h1n1

这个步骤我每天都会这样做,有时我会得到2000行:/真正的痛苦

我曾经在记事本++中使用正则表达式 但我找不到这个匹配 在php中我也不是很糟糕 请帮帮我

更新01: 正则表达式发现(?i)^ [^ |] \ | \ h [a-z \ d] {0,8} $ \ R? 目前的问题: 写一个小的PHP脚本或可能重用的类

  1. 接口
  2. 从文本框(html表单)或txt文件

    提交数据
    1. 处理:
    2. 与txt文件中可下载的正则表达式匹配的行。 文件中的其他人

      1. 输出
      2. 文件的2个链接

        提前感谢大家的帮助

1 个答案:

答案 0 :(得分:2)

如果您只使用与.*匹配的贪婪点,则不检查长度。可以使用限制量词进行检查。要匹配0到8个符号,您可以使用{0,8}。除|之外的所有内容都可以与[^|]*否定字符类匹配。

使用

(?i)^[^|]*\|\h*[a-z\d]{0,8}$\R?

请参阅regex demo(请注意,默认情况下,在基于Notepad ++ regex的搜索和替换中使用gm标志。)

解释

  • ^ - 开始行
  • [^|]* - 管道以外的零个或多个符号
  • \| - 文字管道符号
  • \h* - 零个或多个水平空格
  • [a-z\d]{0,8} - 字母a到z和A到Z(由于(?i)不区分大小写的修饰符)或数字,0到8次出现
  • $ - 行尾和
  • \R? - 一个或零(otpional)换行符。

enter image description here