1

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

\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 
}

我认为必须有更好的方法,而不是复制整个正则表达式并进行测试。

4

2 回答 2

6

请改用此正则表达式:

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

然后简单地测试第一组的存在——如果存在,则下划线存在。原来的第 1 组将成为第 2 组。

于 2011-01-11T21:23:29.527 回答
3
\s*(__)?(\w+)

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

于 2011-01-11T21:23:50.837 回答