仅当输入结束或使用Newline / Whitespace时,.Net正则表达式匹配

时间:2014-11-14 14:47:54

标签: .net regex

我有一个几乎按预期工作的.Net正则表达式(应该匹配特定标识符键之后的值,后跟括号内的一组可选的空白分隔值,请参阅http://regex101.com/r/yW4aZ3/113),但它也匹配一点松散。

基本上它只应匹配如果匹配和optional()后跟输入的结尾,一个或多个空格或换行符。

使用的正则表达式是:

^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?

样本是:

Identifier abc sdfadf << should match 'abc'
Identifier a_123bc(def) << should match 'a_123bc' and 'def'

Identifier abcdef~ << does match but should NOT match because 'abcdef' is not followed by either line end, whitespace(s) or newline(s)

有没有人知道如何正确地执行上述示例?

2 个答案:

答案 0 :(得分:0)

尝试使用正向前瞻(有关详细信息,请参阅此示例article)。例如,如果我们在正则表达式的末尾添加(?=\s|$),它将仅匹配字符串后跟空格或字符串结尾,但不匹配此空格:

^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?(?=\s|$)

答案 1 :(得分:0)

^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?

决赛?说零或一次,因此这将匹配任何

^Identifier ([a-zA-Z0-9-_]+)

会匹配。

听起来像你想要的那样:

^Identifier ([a-zA-Z0-9-_]+)(?:\(([^)(]*)\))?(?=[\s$])

最后的(?=[\s$])表示行尾或空白作为正向前瞻