0

有人可以告诉我一个正确的语法。完整的字符串应仅由每个模式中的数字、字符和空格组成,类型除外。类型和一个参数是强制性的。前后的空格> :是强制性的。后面的空格,是强制性的。几个参数和节点是可选的。

GOOD
type : param
type : par am, para m > no de
type : param > node
type : param, param2 > node
type : param, param2, param3 > node

NOTGOOD
type:                             <<< no param
type: param                       <<< because no whitespace after type
type : param,                     <<< , to much
type : param, param, > node       <<< 1 , after second param to much
type : param, param >> node       <<< 1 > to much

这就是我现在所拥有的:

^(?<type>(\w+(\s)*))\s+:\s+(?<params>.+\S*?)(?<node>\s+>\s+(\w|\s)*?)*$
4

1 回答 1

2

试试这个正则表达式:

"^(?<type>\w+)\s+:\s+(?<params>\w[\s\w]*(,\s+\w[\s\w]*)*)(\s+>\s+(?<node>\w[\s\w]*)*)?$"

您没有给出具有多个节点的示例,所以我不知道它们的外观。这只允许它们之间有空格。如果它们应该有逗号,则使“节点”匹配组与“参数”匹配组相同。

根据您的最新评论,似乎每个参数和节点都可以有多个“单词”,但没有前导或尾随空格。这也意味着在每个,和. 之后只有一个空格字符。如果这是真的,那么试试这个正则表达式的变体::,>

"^(?<type>\w+)\s+:\s(?<params>\w([\s\w]*\w)*(,\s\w([\s\w]*\w)*)*)(\s>\s(?<node>\w([\s\w]*\w)*)*)?$"
于 2013-05-01T20:17:21.617 回答