我有这个正则表达式来确定该行是否包含两个下划线:
\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
}
我认为必须有一种更好的方法,而不是重复整个正则表达式并使用和不使用测试。
答案 0 :(得分:6)
请改用此正则表达式:
\s*(_{2})?(\w+)
然后只测试第一组的存在 - 如果它存在,则下划线存在。第1组将成为第2组。
答案 1 :(得分:3)
\s*(__)?(\w+)
(__)?
是一个由两个下划线组成的可选组。请注意,该单词现在将在第2组中而不是1.如果您不想更改组编号,则可以使用非捕获组(?:__)
。