regex C#中的正则表达式错误

z8dt9xmd  于 2023-10-22  发布在  C#
关注(0)|答案(5)|浏览(140)

我在C#中输入了这个字符串:

string InputNames = "\"James Alkaba\", \"Carl James\", \"Thomas Merk\"";

我想用一个正则表达式来使这个字符串看起来像:James Alkaba,Carl James,Thomas Merk。基本上是为了去掉“”和,后面的空格。
我试过这个:

\s*""([^""]+)"""

但好像不管用
代码(现在没有使用regex,但我认为使用它可能是最好的解决方案):

public static string[] GetListOfUsers()
{
   // String InputNames is loaded from a tool and it contains text "James Alkaba", "Carl James", "Thomas Merk" including the " symbol

   string[] names = InputNames.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

   return names;
}

我尝试在组合框中列出返回的数组:

string[] users = Common.GetListOfUsers();
cmbOwner.Items.AddRange(users);

所以当我打开组合框时,它只会列出所有的名字。

0aydgbwb

0aydgbwb1#

假设名称没有",您可以使用

"(?<text>[^"]+)"

例如,使用text名称的 group 的模式和匹配

using System.Linq;
using System.Text.RegularExpressions;

...

string source = @"""James Alkaba"", ""Carl James"", ""Thomas Merk""";

string result = string.Join(",", Regex
  .Matches(source, @"""(?<text>[^""]+)""")
  .Cast<Match>() // <- may be dropped in late c# versions
  .Select(match => match.Groups["text"].Value));

Console.Write(result);

输出

James Alkaba,Carl James,Thomas Merk

Fiddle

eivnm1vs

eivnm1vs2#

我能想到的最简单的方法就是:

string input = "\"James Alkaba\" , \"Carl James\", \"Thomas Merk\"";
Console.WriteLine(Regex.Replace(input, "\"(.+?)\"\\s*(,|$)\\s*", "$1$2"));

其中:

  • \"(.+?)\"-捕获所有在引号中的内容(非贪婪)为$1
  • \\s*-逗号(或字符串结尾)前的未捕获空格,
  • (,|$)-捕获逗号或字符串结尾为$2
  • \\s*-逗号(或字符串结尾)后的未捕获空格。

输出量:

James Alkaba,Carl James,Thomas Merk
uujelgoq

uujelgoq3#

如果,只是一秒钟,忘记引号或逗号或其他东西,但字母,并创建一个模式来查找2组字母,由空格分隔?
例如,@"[A-Za-z]+\s{1}[A-Za-z]+",其中:

  • [A-Za-z]+-第一组字母,即Firstname
  • \s{1}-单空间分隔器
  • [A-Za-z]+-Lastname的第二组字母

使用方法:

using System.Linq;
using System.Text.RegularExpressions;
// ...

string inputNames = "\"James Alkaba\", \"Carl James\", \"Thomas Merk\"";
var names = Regex.Matches(inputNames, @"[A-Za-z]+\s{1}[A-Za-z]+")
                 .OfType<Match>()
                 .Select(match => match.Value); // optionally, ...Value.Trim()
                 //.ToArray(); or .ToList(); or skip, if it's not neccessary to evaluate

// Output:
// [0] James Alkaba
// [1] Carl James
// [2] Thomas Merk

// And append to Combobox: 
cmbOwner.Items.AddRange(names);
7cwmlq89

7cwmlq894#

正如我在注解中提到的,您只需要使用 * String.Replace * 方法。
所以你的方法会是这样的:

public static string[] GetListOfUsers()
{
   // String InputNames is loaded from a tool and it contains text "James Alkaba", "Carl James", "Thomas Merk" including the " symbol

   string[] names = InputNames.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

   return names.Select(n => n.Replace("\"\"", "")).ToArray();
}
mefy6pfw

mefy6pfw5#

这不需要正则表达式,没有它会更容易。只需要简单地使用.Replace()来删除、“和。比如说,

string InputNames = "\"James Alkaba\", \"Carl James\", \"Thomas Merk\"";
string output = InputNames.Replace("\\", "").Replace("\"", "").Replace(", ", ",");

output = "James Alkaba,Carl James,Thomas Merk"

相关问题