Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过正则表达式匹配以可选字符串结尾的值?_C#_Regex_Lookbehind - Fatal编程技术网

C# 如何通过正则表达式匹配以可选字符串结尾的值?

C# 如何通过正则表达式匹配以可选字符串结尾的值?,c#,regex,lookbehind,C#,Regex,Lookbehind,我试图从一个文本片段中提取一个名字,该文本片段的姓氏可以选择与:name在同一行 例如: 所以我想从该行中提取零件,但是如果没有名称,它应该返回完整的行 我尝试了以下正则表达式: [A-zÀ-ÿ-]{2,}?=?:名称 如果在同一行中有一个姓氏,那么这很好,但是如果没有姓氏,则不会返回完整的行。不幸的是,解决方案似乎不像添加|美元那么简单 我是否可以查找可选的结束词,如果它没有出现,则忽略它?您可以使用 ^?\p{L}+:名称?\p{L}+$ 看。输出: 细节 ^-字符串的开头 ?\p{L}+?

我试图从一个文本片段中提取一个名字,该文本片段的姓氏可以选择与: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匹配!; } } 输出:

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}。