当前位置: 首页 > 知识库问答 >
问题:

正则表达式删除两个字符之间的所有内容

蒋烨然
2023-03-14

我有以下字符串:

"<a href=\"/formentries/formfile/13978\" target=\"_blank\">dog-00.jpg|image/jpeg</a>  <a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13978'> [remove]</a><br /><a href=\"/formentries/formfile/13979\" target=\"_blank\">dog-01.docx|application/vnd.openxmlformats-officedocument.wordprocessingml.document</a>  <a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13979'> [remove]</a><br /><a href=\"/formentries/formfile/13980\" target=\"_blank\">dog-02.png|image/png</a>  <a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13980'> [remove]</a>"

如果您将它格式化得很好,您将会看到类似这样的内容:

<a href=\"/formentries/formfile/13978\" target=\"_blank\">dog-00.jpg|image/jpeg</a>
<a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13978'> [remove]</a>
<br />

<a href=\"/formentries/formfile/13979\" target=\"_blank\">dog-01.docx|application/vnd.openxmlformats-officedocument.wordprocessingml.document</a>
<a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13979'> [remove]</a>
<br />

<a href=\"/formentries/formfile/13980\" target=\"_blank\">dog-02.png|image/png</a>
<a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13980'> [remove]</a>

所以我有一堆锚标签,它们之间有断点。在每个锚的文本中,我想删除管道字符和文件类型:

狗-00.jpg|图像/JPEG

变成

dog-00.jpg

正则表达式也应该适用于所有未来的文件类型,例如:

dog-01.docx|应用/vnd.openxmlformats-officedocument.wordprocessingml.document

变成

dog-01.docx

我仍然需要完整的锚点,因此删除文件类型后,文本变为:

<a href=\"/formentries/formfile/13978\" target=\"_blank\">dog-00.jpg</a>
<a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13978'> [remove]</a>
<br />

<a href=\"/formentries/formfile/13979\" target=\"_blank\">dog-01.docx</a>
<a href='/FormEntries/Delete' class='btnDeleteAttachment'  data-form-entry-id='366793'  data-attachment-id='13979'> [remove]</a>
<br />

我不太擅长Regex,但我尝试了各种组合,但都不匹配

共有3个答案

唐康安
2023-03-14

输入:< br > < code > dog-00 . jpg | image/JPEG

仅匹配|管道前部分的正则表达式:
([^|] )

描述:< br >上述正则表达式匹配所有内容,直到出现第一个管道字符。

C#代码:

var input = @"dog-00.jpg|image/jpeg";
var regex = new Regex(@"([^|]+)");
var m = regex.Match(input);
string name = null;
if (m.Success)
{
     name = m.Groups[1].Value;
}

编辑:
如果这只是关于按管道字符拆分字符串,Dylan尼科尔森的变体输入。拆分(或。子字符串。索引)可能比正则表达式性能更好…

编辑2:
需要正则表达式吗?如果没有,请尝试以下操作:

public static string Clean(string input)
{
    var sb = new StringBuilder(input);
    int m1 = -1, m2 = -1;
    for(var i = 0; i < sb.Length; i++)
    {
        if (sb[i] == '|')
            m1 = i;
        if (sb[i] == '<')
            m2 = i;
        if (m1 > -1 && m2 > -1 && m2 > m1)
        {
            sb.Remove(m1, m2 - m1);
            i = m1;
            m1 = -1;
            m2 = -1;
        }
    }
    return sb.ToString();
}
严誉
2023-03-14

更新

您可以使用此正则表达式:

(?<=<a[^>]*>[^|]+?)\|.*?(?=</a>)

对于C#:

 your_string = Regex.Replace(your_string, "(?<=<a[^>]*>[^|]+?)\\|.*?(?=</a>)", "",
    RegexOptions.IgnoreCase | RegexOptions.Multiline);

只需使用此正则表达式替换字符串。

章城
2023-03-14

不要使用正则表达式来解析复杂的超文本标记语言,您可以使用HtmlAgilityPack。我还会使用字符串方法,如包含IndexOf删除而不是正则表达式:

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html); // pass in your HTML string

foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
{
    string text = link.InnerText;
    if (text.Contains('|'))
        link.InnerHtml = text.Remove(text.IndexOf('|')); // you can't modify InnerText directly but this works
}

string result = doc.DocumentNode.OuterHtml; // your desired result
 类似资料:
  • 问题内容: 我将如何使用regx返回两个方括号之间的所有字符。这是一个例子: 我发现一个正则表达式可以在花括号之间进行操作,但是使它与方括号一起使用的所有尝试均失败了。这是正则表达式:这是我试图破解它 最终解决方案: 问题答案: 将匹配一条线并捕获组中您想要的内容。 你必须逃脱,并用 rubular.com证明链接上的文档将解释表达式的形成方式。

  • 我想知道如何使用正则表达式删除除所有图像标记之外的所有内容。 我已经试过了: (?s)^[^ (?s)^([^ 有谁知道如何将这 2 个组合为多个图像? 下面是我想应用它的内容示例: 我期望的结果应该是:

  • 问题内容: 我有两个弦 和。现在,我想对这些字符串应用一个正则表达式,以过滤掉除数字以外的所有内容,以便获得像和这样的整数。 我该怎么做? 问题答案: 您可以使用。它会考虑您所拥有的一切之外的一切。 因此,如果要过滤除y以外的所有内容。在你的情况下,你会做类似的事情 其中string是保存实际文本的变量!

  • 本文向大家介绍python正则表达式去除两个特殊字符间的内容方法,包括了python正则表达式去除两个特殊字符间的内容方法的使用技巧和注意事项,需要的朋友参考一下 以去掉去掉<!--和-->为例进行说明: 以上这篇python正则表达式去除两个特殊字符间的内容方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 在Java中,是否有一种简单的方法可以通过在两侧指定正则表达式定界符而不在最终的子字符串中包含定界符来提取子字符串? 例如,如果我有这样的字符串: 提取子字符串的最简单方法是什么: 请注意,子字符串可能包含换行符… 谢谢! 问题答案: 编写这样的正则表达式: …并从匹配器中拉出中间组(以处理您要使用Pattern.DOTALL的模式中的换行符)。 使用您的示例,我们可以编写如下程序: