C# 如何通过正则表达式匹配以可选字符串结尾的值?
我试图从一个文本片段中提取一个名字,该文本片段的姓氏可以选择与:name在同一行 例如: 所以我想从该行中提取零件,但是如果没有名称,它应该返回完整的行 我尝试了以下正则表达式: [A-zÀ-ÿ-]{2,}?=?:名称 如果在同一行中有一个姓氏,那么这很好,但是如果没有姓氏,则不会返回完整的行。不幸的是,解决方案似乎不像添加|美元那么简单 我是否可以查找可选的结束词,如果它没有出现,则忽略它?您可以使用 ^?\p{L}+:名称?\p{L}+$ 看。输出: 细节 ^-字符串的开头 ?\p{L}+?-第一组:一个或多个字母,但尽可能少 ?:名称?\p{L}+?-可选的非捕获组: 名称-子字符串 ?\p{L}+-最后一组:一个或多个字母 $-字符串的结尾。 见: var strings=新列表{JohnnameSnow,John}; 字符串中的foreach变量s { 控制台。写入线; var m=Regex.Matchs,@^?\p{L}+:name?\p{L}+?$; 如果我成功了 { Console.WriteLineFirst name:{0},Last name={1},m.Groups[first].Value,m.Groups[Last].Value; } 其他的 { Console.WriteLineNo匹配!; } } 输出:C# 如何通过正则表达式匹配以可选字符串结尾的值?,c#,regex,lookbehind,C#,Regex,Lookbehind,我试图从一个文本片段中提取一个名字,该文本片段的姓氏可以选择与:name在同一行 例如: 所以我想从该行中提取零件,但是如果没有名称,它应该返回完整的行 我尝试了以下正则表达式: [A-zÀ-ÿ-]{2,}?=?:名称 如果在同一行中有一个姓氏,那么这很好,但是如果没有姓氏,则不会返回完整的行。不幸的是,解决方案似乎不像添加|美元那么简单 我是否可以查找可选的结束词,如果它没有出现,则忽略它?您可以使用 ^?\p{L}+:名称?\p{L}+$ 看。输出: 细节 ^-字符串的开头 ?\p{L}+?
JohnnameSnow
First name: John, Last name = Snow
John
First name: John, Last name =
你可以用
^?\p{L}+:名称?\p{L}+$
看。输出:
细节
^-字符串的开头
?\p{L}+?-第一组:一个或多个字母,但尽可能少
?:名称?\p{L}+?-可选的非捕获组:
名称-子字符串
?\p{L}+-最后一组:一个或多个字母
$-字符串的结尾。
见:
var strings=新列表{JohnnameSnow,John};
字符串中的foreach变量s
{
控制台。写入线;
var m=Regex.Matchs,@^?\p{L}+:name?\p{L}+?$;
如果我成功了
{
Console.WriteLineFirst name:{0},Last name={1},m.Groups[first].Value,m.Groups[Last].Value;
}
其他的
{
Console.WriteLineNo匹配!;
}
}
输出:
JohnnameSnow
First name: John, Last name = Snow
John
First name: John, Last name =
试试看:\b[a-zA-Z]+??=name |$试试看:\b[a-zA-Z]+??=name |$我的伙计,你在这里玩冠军联赛的雷鬼。感谢您教我有关命名组和\p{L}的知识@朱尔斯很乐意帮忙。请注意,在某些语言中,字母可能与变音符号组合,然后您需要将每个字母替换为?>\p{L}\p{M}*。伙计,您在这里玩冠军联赛正则表达式。感谢您教我有关命名组和\p{L}的知识@朱尔斯很乐意帮忙。请注意,在某些语言中,字母可能与变音符号组合在一起,然后需要用?>\p{L}\p{M}*替换每个\p{L}。