从特定字符串中删除单词的正则表达式

4
我尝试在这个字符串中删除 "Admin" 这个词。
1H|\^&|||ARCHITECT^8.10^F3453010030^H1P1O1R1C1Q1L1|||Admin||||P|1|20150511083525
1D

使用这个正则表达式
[^\w\b(Admin\])\b.-]+ 

并且输出是1H|ARCHITECT|8.10|F3453010030|H1P1O1R1C1Q1L1|Admin|P|1|20150511083525|1D

它没有删除Admin这个单词。

期望的输出:

1H|ARCHITECT|8.10|F3453010030|H1P1O1R1C1Q1L1|P|1|20150511083525|1D

我需要帮助改进正则表达式 :(


1
你尝试过使用 String.Replace 吗? - Eser
没有,但我写的程序是基于那个正则表达式的,数据是动态变化的,管理员单词可能会更改为不同的索引。 - Kevin Rodriguez
Kevin,那又怎样?string.Replace仍然可以使用。 - Eser
5个回答

5
基本上你的正则表达式应该像这样:
string input = @"1H|\^&|||ARCHITECT^8.10^F3453010030^H1P1O1R1C1Q1L1|||Admin||||P|1|20150511083525
    1D";
string pattern = @"([^\w]*Admin[^\w]*)+|[|\\^&\r\n]+";
string replacement = "|";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);

你好,如果我有两个管理员1H|^&|||ARCHITECT^8.10^F3453010030^H1P1O1R1C1Q1L1|||Admin|Admin|||P|1|20150511083525,该怎么办? - Kevin Rodriguez
你好,这里只有一个问题,如果字符中有空格,它应该用|替换空格。 - Kevin Rodriguez
使用此正则表达式:([^\w]*Admin[^\w]*)+|[|\\^&\r\n\s]+ - Arunesh Singh

5

这里不必使用正则表达式,可以使用Replace函数;

yourString.Replace("Admin|", string.Empty);

如果你觉得使用正则表达式很重要 - 可以尝试这个变体:
Regex r = new Regex(@"\bAdmin|\b");
var output = r.Replace(s, string.Empty);

甚至可以使用yourString.Replace("|Admin|", "||");,如果“Admin”出现在其他地方。 - AdrianHHH
不会移除“空格” - || - 如果您看到所需的输出,则会发生这种情况。 - SamWhan

1
你可以简单地通过以下方式实现:

\|*Admin\|*

您可以使用这个正则表达式进行删除,并用|替换。请参见演示。

https://regex101.com/r/uF4oY4/81


1
这里有一个两步解决方案:使用您的正则表达式(在否定字符类中添加|),并将\bAdmin\b作为替代选项(在您的正则表达式中,它不被视为一系列字符,而是单个字符ad...,\b在字符类中匹配退格符号,而不是单词边界),用|替换,然后重新连接字符串。
var str = "1H|\\^&|||ARCHITECT^8.10^F3453010030^H1P1O1R1C1Q1L1|||Admin||||P|1|20150511083525\r\n1D";
var res = string.Join("|", Regex.Replace(str, @"[^|\w.-]+|\bAdmin\b", "|").Split(new[] {"|"}, StringSplitOptions.RemoveEmptyEntries));

结果: 输入图像描述

更新

你也可以使用以下正则表达式一次性替换所有内容:

\W*Admin\W*|[\\|^&\s]+

查看 演示

enter image description here


1

100%工作正常

 Regex.Replace(@"1H|\^&|||ARCHITECT^8.10^F3453010030^H1P1O1R1C1Q1L1|||Admin||||P|1|20150511083525  1D", "Admin", "",System.Text.RegularExpressions.RegexOptions.IgnoreCase);

变更:

1:字符串之前加上@和

2:System.Text.RegularExpressions.RegexOptions.IgnoreCase


如另一条评论中所说,将正则表达式(第二个参数 - Admin)更改为 \|Admin\|' 以删除垂直线。然后添加 |||以删除“空格”并替换为|。即将 "|Admin||||"作为正则表达式(第二个参数),将"|"作为替换字符串(第三个参数)。这不是完美的,因为如果Admin` 或空格位于字符串的开头或结尾,则无法正常工作。虽然可以修复,但如果不必要,我不想进一步复杂化它 ;) - SamWhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接