正则表达式匹配字符串,如果它是行上唯一的东西(空格除外)

时间:2015-11-25 18:00:26

标签: regex

我是regex的新手并且已经对此进行了大量搜索,但无法理解它。

我需要匹配一个字符串(可能包含空格),让我们说 The Dog ,但只有当它是该行上的唯一项目时(后跟\ n字符)。例如,我的输入文件可能包含以下内容,但我只对The Dog的第一个实例感兴趣(它是唯一可以将其与潜在的其他实例区分开来的方式):

The Dog
    property 1 : 5
    property 2 : depends on The Dog
    property 3 : more data

单独出现在该行上,它可能会或可能不会以空格开头。

我找到类似的问题,答案提示诸如(^ | [])之类的东西,检查字符串的开头或前面的空格,但我到目前为止找到的所有建议都匹配我的两个实例例。

有人可以帮忙吗?感谢。

5 个答案:

答案 0 :(得分:1)

它实际上取决于您使用的正则表达式,但大多数都允许m标记,以确保^$标记匹配开头和结尾(分别)每一行。有了它,结合\s*消耗任何空格,如果有的话,你可以使用以下内容:

^\s*The\s*Dog\s*$

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

您可以使用以下内容:

^\s*The\s*Dog\s*$

请参阅RegEx Demo

答案 2 :(得分:0)

在javascript中,您可以执行以下操作:

var doesMatch = ("  The Dog").match(/^\s*The Dog\s*$/);
if (doesMatch) {
   //found a match
}

答案 3 :(得分:0)

非常感谢,我用了

^ \ S 的\ S 犬\ S * $

答案 4 :(得分:0)

因为“狗”只是根据你原来的帖子的一个例子,我建议使用^(?:\s*\w*)+\n。 这匹配一个行开头,然后匹配1到无限次重复零或无限数量的空格(\ s *),后跟零或无限数量的单词字符(\ w *),后跟换行符。 由于字符串中的(?:)部分,将不会捕获匹配的部分。如果您只想测试字符串是否匹配,这非常有用。如果要捕获字符串的哪个部分匹配,请使用^((?:\s*\w*))+\n

但正如“R Nar”指出的那样,它取决于正则表达式的味道。上面的正则表达式可以在javascript中工作,但是在python中就可以了。告诉我们您尝试使用哪种编程语言匹配主题字符串,我们可以为您提供一个有效的示例。

如果你使用javascript,这里是你如何循环捕获匹配的字符串部分的所有匹配:

var myregexp = /^((?:\s*\w*)+)\n/g;
var match = myregexp.exec(subject);
while (match != null) {
    // matched text: match[0]
    // match start: match.index
    // capturing group 1: match[1]
    match = myregexp.exec(subject);
}