正则表达式匹配不是特定数字的字符串?

时间:2015-05-28 11:31:46

标签: regex

我有一个标签分隔的文件,如下所示:

Something    1    Text...
Something    2    Text...
Something    2001 Text...
Something    1    Text

我希望匹配倒数第二列中没有1的所有行。所以我尝试了这个:

\t[^1][^\t]*\t[^\t]*$

但由于某种原因,这不起作用。任何提示?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式:

/^\S+\s+(?!.*1).*$/gm

RegEx Demo

或者,如果您希望1成为完整的单词,请使用:

/^\S+\s+(?!.*\b1\b).*$/gm

RegEx Demo2

修改

仅检查最后2列中1的存在情况:

/\t(?!.*1)\S+\t+\S+$/gm

RegEx Demo 3

答案 1 :(得分:1)

您的正则表达式\t[^1][^\t]*\t[^\t]*$不起作用,因为它与标签匹配,然后1以外的任何字符,1次,然后是除标签以外的0或更多字符,a选项卡,以及行尾之前的标签以外的0个或更多字符(如果您使用的是m模式)。

我建议先读取第一列中的所有内容,然后选择一个标签,然后设置一个检查,以便我们没有“1”:

^[^\t]*\t(?!.*1).*$

注意多行m标志。

这是my demo

修改

如果您只需要确保最后2列中没有1,请使用此正则表达式:

^.*(?!.*1)[^\t]+\t[^\t]+$

EXPANATION:

  • ^ - 行首
  • .* - 从头开始​​使用任何字符
  • (?!.*1) - 设置一个1的支票 - 它不应该出现在行尾之前!
  • [^\t]+标签以外的1个或多个字符
  • \t - 标签
  • [^\t]+ - 标签以外的1个或多个字符
  • $ - 行尾。

请参阅another demo

答案 2 :(得分:0)

您可以使用以下正则表达式:

/^[^\t]*\t((?!1).)*$/gm

Demo

(?!1)是一个负向前看,匹配任何未跟随1

的字符

答案 3 :(得分:0)

如果您只想匹配第二列中没有字符1的行,直到该行的结尾,您可以使用此模式:

^[^\t]*\t[^1]*$