查找第一个单词(并且只有第一个单词)包含数字的所有行

时间:2014-03-16 15:04:06

标签: regex grep

问题: 我有一个多行文字。一行可以包含多个句子。 我需要一个正则表达式,它只显示行的第一个单词本身包含非特定数字的行(可能是1或2234234)

例如:

  • Thi5 is a t3st.我想在结果中使用这一行。
  • This is also a test but with a number in the first word of the second sentence. Th1s is the 2nd sentence,我在结果中不希望这样。
  • This is a t3st,但我对这一行也不感兴趣。
  • Th1s i want too.
  • 0r this one as well
  •  0r this one i want regardless of the whitepace in front of it
  • But n0t this.

我必须承认我是正则表达式的n00b。 到目前为止,我发现了以下内容:

^(.*)?[0-9](.*)?

然而,如果例如有一个号码,它也会匹配。第三个词但不是第一个词。 我看到^(.*)?匹配从行首开始的任何内容,以及包含该数字的第3个单词之前的任何文本。

为了使它更复杂,第一个单词也可以包含特殊字符(?/&%$"§或任何其他字符)。

如果我会使用^[a-zA-Z]?而不是^(.*)?这样的字符类,就我所能看到的一切都会好的,但它不会捕获空格或特殊字符,也不会数字前面有多个字符。

2 个答案:

答案 0 :(得分:3)

您可以使用:

^\s*\S*[0-9].*

<强>说明:

^     # Start of string
\s*   # Match optional whitespace at the start of the line
\S*   # Match any number of characters except whitespace
[0-9] # Match a digit
.*    # Match the rest of the string

live on regex101.com

答案 1 :(得分:0)

我认为您需要检查空格。尝试:^\s*\S*[0-9]+\S*\s

^可以表示“除了”以外的任何内容,例如[^9]除了数字9之外的任何东西,或者它可以表示从字符串的开头匹配,就像它在这里一样。

\s*表示匹配可选空格,即\s匹配空格,*为零或更多次。

\S*匹配可选的非空格。这是除换行符,回车符,空格和制表符之外的任何字符。

[0-9]+匹配1个或更多数字,即[0-9]是匹配数字,+是1次或更多次。

\S* - 与上面的\S*相同。

\s匹配1个空白字符。