命名捕获组内的非捕获组

时间:2014-05-09 05:06:11

标签: regex

我正在尝试匹配.NET正则表达式中命名捕获组内的非捕获组,但由于某种原因,仍然捕获了非捕获组:

  • 输入:“A / B”
  • 实际输出:令牌=“A / B”
  • 所需输出:令牌=“AB”

我尝试使用非捕获组:

(?<Token>\w(?:/)\w)

我有一种感觉,我需要在这里使用前瞻和/或外观,但我仍然无法让它工作。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

(?:/)部分仍然包含在捕获组中,它只是不构成自己的捕获组。你可以这样做:

(\w)(?:/)(\w)

这将捕获单独的捕获组中的AB,但这并不能完全符合您的要求。

您可以执行的操作是捕获整个组(?<Token>\w/\w),然后无需更换/字符串。

答案 1 :(得分:0)

试试这个:

1.9.3-p545 :022 > line = "A/B"
 => "A/B" 
1.9.3-p545 :023 > test = line.scan(/([A-z: ]+)/).flatten.join()
 => "AB" 
1.9.3-p545 :024 >