您好我正在写正则表达式:我需要从这一行获取信息
;row:1;field:2;name:3
我这行的正则表达式是
.*(row:([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,});
但是单词row是可选的问题,我也可以得到没有单词行的行,但在这种情况下我的正则表达式不起作用,我怎么写呢?
感谢。
答案 0 :(得分:1)
如果您只是想让单词行可选,您可以用括号括起来并使用问号表示您想要零或一个括号内容。我已经在下面展示了:
(row:)?
这将找到零或一个"行:"。如果您不打算创建匹配组,我建议您在开括号内添加?:
运算符:
(?:row:)?
添加?:
运算符会告诉程序括号不是匹配组的一部分,而您只是使用括号对字母进行分组。所以把它放到正则表达式中就像这样:
.*((?:row:)?([0-9]{1,}))?;.*field:([0-9]{1,});.*name:([0-9]{1,});
如果您希望将此应用于"字段:"和"名称:",那么你会得到这个:
.*((?:row:)?([0-9]{1,}))?;.*(?:field:)?([0-9]{1,});.*(?:name:)?([0-9]{1,});
如果您不希望表达式中的其他括号创建匹配组,我也会更改它们。此外,为了缩短表达并使其更清晰,我会将[0-9]
更改为\d
,这意味着任何数字,我会将{1,}
替换为+
,这意味着&# 34;一个或多个",并删除不必要的parens导致这个:
.*(?:(?:row:)?\d+)?;.*(?:field:)?\d+;.*(?:name:)?\d+;
我不确定这是你想要的最终表达,因为你的问题不是很具描述性,但我已经告诉你如何找到一个或多个" row:&#34 ;并且在不改变其含义的情况下清理表达。