正则表达式匹配2或没有?

时间:2011-01-11 21:21:34

标签: java regex regex-group

我有这个正则表达式来确定该行是否包含两个下划线:

\s*_{2}(\w+)

任何空格,两个下划线然后一个字。事实证明,我也需要知道没有下划线,所以我有:

\s*(\w+)

可选空格后跟一个单词。然后我得到了第1组,这是我的话。到现在为止还挺好。

问题是当使用两个下划线时采取的操作,当没有使用下划线时几乎与代码相同(除了我举起一个标志)

if( s =~ uderscore ) { 
   takeGroup( 1 )
   yada yada 
   flag = true
} else if( s =~ noUnderscore { 
  takeGroup( 1 ) 
  yada yada 
   flag = false 
}

我认为必须有一种更好的方法,而不是重复整个正则表达式并使用和不使用测试。

2 个答案:

答案 0 :(得分:6)

请改用此正则表达式:

\s*(_{2})?(\w+)

然后只测试第一组的存在 - 如果它存在,则下划线存在。第1组将成为第2组。

答案 1 :(得分:3)

\s*(__)?(\w+)

(__)?是一个由两个下划线组成的可选组。请注意,该单词现在将在第2组中而不是1.如果您不想更改组编号,则可以使用非捕获组(?:__)