好的,我有一个变量,我倾销员工姓名。输出看起来像这样
1031;#Sharepoint Test Account 4,;#1898;#Smith, Bill
我只需要没有索引编号和井号的员工姓名。我试过这个(?<=;#).*$
但没有帮助。
输出应为
SharePoint Test Account 4; Smith, Bill
答案 0 :(得分:1)
鉴于你给我们的东西,你根本不需要正则表达式。最简单的方法是Split
字符串:
string input = "1031;#Sharepoint Test Account 4,;#1898;#Smith, Bill";
var cells = input.Split(new string[] {";#"}, StringSplitOptions.RemoveEmptyEntries);
// if you know the input strings will *always* conform to the same format
// you *might* be able to skip this check
if (cells.Length >= 4)
{
string output = cells[1] + ";" + cells[3];
}
else
{
// the input was malformed and didn't conform to the expected format
}
output
将是Sharepoint Test Account 4,;Smith, Bill
我认为在您的问题中4
错误之后缺少逗号。
以上假设输入字符串始终具有相同的格式,至少有三个;#
子字符串(因此您将拆分为4个单元格),而第二个和第四个单元格是您感兴趣的单元格。
答案 1 :(得分:0)
将此正则表达式与命名匹配捕获一起使用可以提取数据并将匹配结果投影到匿名实体中,以便轻松使用:
var text = "1031;#Sharepoint Test Account 4,;#1898;#Smith, Bill";
var pattern = @"(?<Value>\d+);#(?<Account>[^;]+)[;#]{0,2}";
var entities =
Regex.Matches(text, pattern)
.OfType<Match>()
.Select (mt => new
{
Value = mt.Groups["Value"].Value,
AccountName = mt.Groups["Account"].Value,
});
<强>结果强>
更新 - 更有针对性的模式
var pattern = @"#(?!\d)([^;]+)";
Regex.Matches(text, pattern)
.OfType<Match>()
.Select (mt => mt.Groups[1].Value)
结果:
答案 2 :(得分:0)
使用此正则表达式;?#?\d+;|#
,您将获得所需的输出。