regex - 如何使用正则表达式使用前缀字符进行拆分?

标签 regex split character prefix

我想分割示例字符串:

~Peter~Lois~Chris~Meg~Stewie

在字符 ~ 上,结果为

Peter
Lois
Chris
Meg
Stewie

在 javascript 或 C# 中使用标准字符串拆分函数,第一个结果当然是空字符串。 我想避免忽略第一个结果,因为第一个结果实际上可能是一个空字符串。

我一直在摆弄使用正则表达式,但我被难住了。 我确信有人已经找到了解决这个问题的优雅解决方案。

最佳答案

根据您的要求,我看到两种选择:

(1) 删除初始前缀字符(如果存在)。

(2)使用完整的正则表达式来分隔字符串。

两者都在这段代码中进行了说明:

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

class APP { static void Main() {

string s = "~Peter~Lois~Chris~Meg~Stewie";

// #1 - Trim+Split
Console.WriteLine ("[#1 - Trim+Split]");
string[] result = s.TrimStart('~').Split('~');
foreach (string t in result) { Console.WriteLine("'"+t+"'"); }

// #2 - Regex
Console.WriteLine ("[#2 - Regex]");
Regex RE = new Regex("~([^~]*)");
MatchCollection theMatches = RE.Matches(s);
foreach (Match match in theMatches) { Console.WriteLine("'"+match.Groups[1].Value+"'"); }

// #3 - Regex with LINQ [ modified from @ccook's code ]
Console.WriteLine ("[#3 - Regex with LINQ]");
Regex.Matches(s, "~([^~]*)")
    .OfType<Match>()
    .ToList()
    .ForEach(m => Console.WriteLine("'"+m.Groups[1].Value+"'"))
    ;
}}

#2 中的正则表达式匹配分隔符,后跟包含零个或多个非分隔符的匹配组。结果匹配是分隔字符串(包括任何空字符串)。对于每个匹配,“match.Value”是包括前导分隔符的整个字符串,“match.Groups 1 .Value”是包含无分隔符字符串的第一个匹配组。

为了完整起见,包含第三种编码 (#3),显示与 #2 中相同的正则表达式方法,但采用 LINQ 编码风格。

如果您正在努力使用正则表达式,我强烈推荐 Mastering Regular Expressions, Third Edition by Jeffrey E. F. Friedl 。到目前为止,它是理解正则表达式的最佳帮助,并且可以根据需要在以后作为极好的引用或复习。

关于regex - 如何使用正则表达式使用前缀字符进行拆分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/500031/

相关文章:

python - 如何替换列表中的多个子字符串?

Java正则表达式和xml标签

mysql - MySQL 可以拆分列吗?

c# - 在 C# 中根据空格拆分字符串

bash - Tesseract 训练 - 微调角色

php - 我如何找出一个字符有多少字节?

windows - 每个操作系统的文件路径中是否存在非法字符?

python - 如何从字符串开头删除重复字符

regex - 模式匹配数字在egrep中不起作用?

javascript - Java 与 JavaScript 拆分行为