TCL正则表达式传递给变量

时间:2017-06-22 13:41:16

标签: regex tcl

使用TCL,我正在尝试设置正则表达式以获取我的xml字符串中的数据。我提供的代码有一个我正在处理的示例字符串,正则表达式试图找到第一个关闭括号并保持数据直到下一个打开括号,然后将其放入变量号。不幸的是,我得到的输出是:“< RouteLabel> Hurdman<”而不是预期的“赫德曼”。任何帮助都会非常感激。

set direction(1) {<RouteLabel>Hurdman</RouteLabel>}
regexp {^.*>(.*)<} $direction(1) number

2 个答案:

答案 0 :(得分:1)

这里的问题不在于正则表达式,而在于你如何使用它。

您需要的语法是

regexp <PATTERN> <INPUT> <WHOLE_MATCH_VAR> <CAPTURE_1_VAR> ... <CAPTURE_n_VAR>

因此,在您的情况下,由于您对整场比赛不感兴趣,只需将_放在预期完整比赛的位置:

set direction(1) {<RouteLabel>Hurdman</RouteLabel>}
regexp {^.*>(.*)<} $direction(1) _ number
puts $number

打印Hurdman。请参阅online Tcl demo

答案 1 :(得分:1)

tDOM中针对此确切任务的崩溃课程:

获取tDOM(注意包名称中的不同拼写):

-1

使用名为using System; using System.Linq; namespace nkhl { public class Program1 { public static void Main(string[] args) { Console.WriteLine("Enter the number: "); string originally_entered_number_inString = Console.ReadLine(); int entered_number_inInt = Convert.ToInt32(originally_entered_number_inString); Console.WriteLine("\nThe number you entered is {0}.", entered_number_inInt); //Counting the number of digits in the entered number: int n = originally_entered_number_inString.ToString().Count(); //entered_number_inInt is added to the array called array_of_the_numbers int[] array_of_the_numbers = entered_number_inInt.ToString().Select(o=> (int)char.GetNumericValue(o)).ToArray(); if(originally_entered_number_inString.Contains("-")) { Console.WriteLine("\nThis is a negative number, so it will print the given number in Descending order."); Array.Sort(array_of_the_numbers); Array.Reverse(array_of_the_numbers); Console.WriteLine("\nThe entered number has {0} digits.", n-1); //n-1 becuase it takes the minus (-) also as a character so it reads 4. Console.WriteLine("\n{0}, in descending order is", entered_number_inInt ); foreach(var i in array_of_the_numbers) { Console.Write(i); } } else { Console.WriteLine("\nThe entered number has {0} digits.", n); Console.WriteLine("{0}, in ascending order is", entered_number_inInt); Array.Sort(array_of_the_numbers); foreach(var i in array_of_the_numbers) Console.Write(i); } } } } 的根元素创建一个空文档:

% package require tdom
0.8.3

修复根目录:

foobar

设置一个XML字符串:

% set doc [dom createDocument foobar]
domDoc02569130

将其添加到根目录的DOM树中:

% set root [$doc documentElement]
domNode025692E0

通过XPath表达式获取所需的字符串:

% set direction(1) {<RouteLabel>Hurdman</RouteLabel>}
<RouteLabel>Hurdman</RouteLabel>

或者通过查询根目录(仅当一次只插入一个单个文本节点时才有效,否则会将它们全部连接起来):

% $root appendXML $direction(1)
domNode025692E0

如果你想从根目录中清除DOM树,以便在没有旧字符串干扰的情况下附加新字符串做好准备:

% $root selectNodes {string(//RouteLabel/text())}
Hurdman

但是如果你使用XPath表达式,你应该能够附加任意数量的XML字符串并仍然检索它们的内容。

再次:

% $root asText
Hurdman

文档: tdom (package)