2

我以前从未使用过 TPerlRegEx,这是我第一次使用正则表达式。

我正在寻找一个在 Delphi Xe2 中使用 TPerlRegEx 删除括号和引号的小示例,如下所示:

输入字符串:

["some text"]

结果:

some text

单行,没有嵌套的括号或引号。我使用 Regexbuddy 创建和测试正则表达式,但它没有给我结果。

4

2 回答 2

5

这适用于正则表达式好友:

正则表达式:

\["(.+?)"\]

代替:

$1

像这样使用:

var
  RegEx: TPerlRegEx;
begin
  RegEx := TPerlRegEx.Create(nil);
  try
    Regex.RegEx := '\["(.+?)"\]';
    Regex.Subject := SubjectString;  // ["any text between brackets and quotes"]
    Regex.Replacement := '$1';
    Regex.ReplaceAll;
    Result := Regex.Subject;
  finally
    RegEx.Free;
  end;
end;

这个怎么运作:

Match the character "[" literally «\[»
Match the character """ literally «"»
Match the regular expression below and capture its match into backreference number 1 «(.+?)»
   Match any single character that is not a line break character «.+?»
      Between one and unlimited times, as few times as possible, expanding as needed (lazy) «+?»
Match the character """ literally «"»
Match the character "]" literally «\]»


Created with RegexBuddy
于 2013-04-11T13:28:34.267 回答
2

例子比比皆是,包括文档中的一个,所以我认为问题实际上是关于分配哪些值来获得特定的所需输出的属性。

RegEx属性设置为要匹配的正则表达式,并设置Replacement为要替换匹配序列的值。一种方法可能是设置RegEx\[|\]|"Replacement字符串。这将从字符串中的任何位置删除所有括号和引号。

要改为仅删除字符串周围的括号和引号对,请尝试设置RegExto^\["(.*)"\]$Replacementto \1。这将匹配整个字符串,然后将其替换为第一个匹配的子表达式,该子表达式不包括周围的四个字符。要将类似的字符串["foo"] ["bar"]变成foo bar,然后删除开始和结束锚并添加非贪婪限定符:\["(.*?)"\]

设置正则表达式和替换后,您就可以分配Subject给要处理的字符串了。最后, call ReplaceAll,完成后,新字符串将Subject再次出现。

于 2013-04-11T13:11:57.797 回答