【问题标题】:Issue with regular expression extracting all matches for a pattern in tcl正则表达式提取 tcl 中模式的所有匹配项的问题
【发布时间】:2019-06-12 23:15:13
【问题描述】:

我正在尝试提取字符串中某个模式的所有匹配项。该字符串是例如:tcl 中的“r[0] 或 c[0]”,但匹配的字符串不是我所期望的。

我尝试使用 regexp -all -inline 来匹配与字符串中的模式匹配的所有子字符串。

%set p "r\[0\] and c\[0\]"
%r[0] and c[0]
% regexp ".\[\\d+\]" $p
%1
% set x [regexp -all -inline ".\[\\d+\]" $p]
%{[0} {[0}

预期结果是 r[0] c[0] 但结果是 [0 [0

【问题讨论】:

  • 使用大括号,而不是双引号,可以减少您需要的反斜杠数量。这对于正则表达式尤其重要。

标签: regex tcl


【解决方案1】:

您没有指定要获得的结果类型。如您所写,您希望匹配在给定字符串中找到的每个字母[数字],在 [] 中只有一个字母和一个数字。 你可以使用这个正则表达式来获取它:

([a-zA-Z]\[\d\])

如果您只想要小写字母,请删除 A-Z。

从现在开始,您可以使用https://www.regextester.com/ 在使用正则表达式之前对其进行检查。

希望你觉得这很有用!

【讨论】:

  • 我在 tcl shell 中尝试了这个,在尝试了以上之后我得到 % set p "r[0] and c[0]" r[0] and c[0] % set x [regexp -all -inline ([a-zA-Z][\d]) $p] 无效的命令名“a-zA-Z”
  • 是 perl 的 regextester.com 吗?
  • 这个有效 - %set x [regexp -all -inline {([r|c][\d])} $p]。但它返回 {r[0]} {r[0]} {c[0]} {c[0]},但这应该没问题。谢谢!
  • @mickeyj,如果你去掉捕获括号,你的输出会更简洁。
  • 谢谢格伦。这有帮助。
猜你喜欢
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 2010-10-12
相关资源
最近更新 更多