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

Osc*_*Ryz 1 java regex regex-group

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

\s*_{2}(\w+)
Run Code Online (Sandbox Code Playgroud)

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

\s*(\w+)
Run Code Online (Sandbox Code Playgroud)

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

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

if( s =~ uderscore ) { 
   takeGroup( 1 )
   yada yada 
   flag = true
} else if( s =~ noUnderscore { 
  takeGroup( 1 ) 
  yada yada 
   flag = false 
}
Run Code Online (Sandbox Code Playgroud)

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

cdh*_*wie 6

请改用此正则表达式:

\s*(_{2})?(\w+)
Run Code Online (Sandbox Code Playgroud)

然后简单地测试第一组的存在 - 如果它存在,则下划线存在.那么第1组将成为第2组.