Regex 如何在Delphi上创建正则表达式以删除方括号和引号

Regex 如何在Delphi上创建正则表达式以删除方括号和引号,regex,delphi,Regex,Delphi,我以前从未使用过TPerlRegEx,这是我第一次使用正则表达式 我正在寻找一个在Delphi Xe2中使用TPerlRegEx删除括号和引号的小示例,如下所示: 输入字符串: ["some text"] 结果: some text 单行,没有嵌套的括号或引号。我使用Regexbuddy创建和测试regex,但是它没有给出结果 ,包括,所以我假设问题实际上是关于为哪些属性分配哪些值以获得特定的所需输出 将RegEx属性设置为要匹配的正则表达式,并将Replacement设置为要替换匹配序列的

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

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

输入字符串:

["some text"]
结果:

some text
单行,没有嵌套的括号或引号。我使用Regexbuddy创建和测试regex,但是它没有给出结果

,包括,所以我假设问题实际上是关于为哪些属性分配哪些值以获得特定的所需输出

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

要仅删除环绕字符串的括号和引号对,请尝试将
RegEx
设置为
^\[“(.*)”\]$
Replacement
\1
。这将匹配整个字符串,然后将其替换为第一个匹配的子表达式,该子表达式不包括周围的四个字符。要像
[“foo”][“bar”]这样旋转字符串
进入
foo-bar
,然后移除起始和结束锚定,并添加一个非贪婪限定符:
\[“(.*?”\]

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

,包括在内,因此我假设问题实际上是分配什么值要获取特定所需输出的属性

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

若要仅删除环绕字符串的括号和引号,请尝试将
RegEx
设置为
^\[“(.*)\]$
并将
Replacement
设置为
\1
。这将匹配整个字符串,然后用第一个匹配的子表达式替换它,该子表达式不包括四个周围的字符。要将像
[“foo”][“bar”]
这样的字符串转换为
foo bar
,请删除起始和结束锚并添加非贪婪限定符:
\[“(.*?”\]


设置好正则表达式和替换后,就可以将
Subject
指定给要处理的字符串了。最后,调用
ReplaceAll
,完成后,新字符串将再次出现在
Subject
中。

这在Regex Buddy中起作用:

正则表达式:

\["(.+?)"\]
替换:

$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

这在Regex Buddy中有效:

正则表达式:

\["(.+?)"\]
替换:

$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

这些字符是否总是在输入字符串中?如果是这样,就不需要正则表达式
s:=Copy(s,3,长度-4)
下面是一个删除匹配的
()
对的示例。将其更改为删除匹配的
[]
方括号和
引号。@Rob Kennedy,我当然可以这样做,但我还没有找到一个类似于delphi的正则表达式示例that@LURD:我试过了。然而,我无法让TPerlRegEx只返回匹配的表达式。我遗漏了一些东西,这就是为什么我要找一个delphi示例为什么不使用内置的正则表达式类这些字符总是在输入字符串中吗?如果是这样,就不需要正则表达式
s:=Copy(s,3,长度-4)
下面是一个删除匹配的
()
对的示例。将其更改为删除匹配的
[]
方括号和
引号。@Rob Kennedy,我当然可以这样做,但我还没有找到一个类似于delphi的正则表达式示例that@LURD:我试过了。然而,我无法让TPerlRegEx只返回匹配的表达式。我遗漏了一些东西,这就是为什么我要找一个delphi示例为什么不使用内置的正则表达式类为什么需要将替换设置为“$1”?@eelias,因为与(++?)模式匹配的东西(即双引号之间)成为捕获组。您可以按索引引用捕获组。在[“某些文本”]的情况下,文本将被捕获为组1。然后,他将所有出现的[“(.+?)”]替换为捕获组1(即$1)的内容,这是您的情况。您可以在这里找到更多信息:为什么需要将Replacement设置为“$1”?@eelias,因为与(++?)模式匹配的内容(即双引号之间)成为捕获组。您可以按索引引用捕获组。在[“某些文本”]的情况下,文本将被捕获为组1。然后,他将所有出现的[“(.+?)”]替换为捕获组1(即$1)的内容,这是您的情况。您可以在此处找到更多信息: