C# 用空格检索字母表
我只想检索字母表,但代码不足以检索 我错过了什么C# 用空格检索字母表,c#,regex,C#,Regex,我只想检索字母表,但代码不足以检索 我错过了什么 [A-Öa-ö]+$ 16440 dallas 23941 cityO < You also have white space after "O" 931 00 Texas 10581 New Orleans 这是因为您从ASCII字符表中指定了一个序列。在ascii表中,åäö不直接在Z之后 你可以在这里看到: 因此,您需要一个单独指定这些内容的正则表达式: [A-Za-zåäöÅÄÖ]+$ 因此,完整的正则表达式是: va
[A-Öa-ö]+$
16440 dallas
23941 cityO < You also have white space after "O"
931 00 Texas
10581 New Orleans
这是因为您从ASCII字符表中指定了一个序列。在ascii表中,åäö不直接在Z之后 你可以在这里看到: 因此,您需要一个单独指定这些内容的正则表达式:
[A-Za-zåäöÅÄÖ]+$
因此,完整的正则表达式是:
var re = new Regex("([A-Za-zåäöÅÄÖ]+)$", RegexOptions.Multiline);
var matches = re.Matches(data);
Console.WriteLine(matches[0].Groups[1].Value);
但是,由于您希望在名称中允许空白,就像在新奥尔良一样,您需要允许空白,只需将其包含在正则表达式中:
var re = new Regex("([A-Za-zåäöÅÄÖ ]+)$", RegexOptions.Multiline);
不幸的是,开头和结尾也包含空格:
" New Orleans "
要解决此问题,请首先将正则表达式指定为贪婪,即告诉它使用更少的字符:
new Regex("([A-Za-zåäöÅÄÖ ]+?)$", RegexOptions.Multiline)
问题是,除了新奥尔良,它不需要其他线路。别问我为什么。为了解决这个问题,我告诉正则表达式,数字和文本之间必须有一个空格,并且文本后面可能有一个空格:
var re = new Regex("\\s([A-Za-zåäöÅÄÖ ]+?)[\\s]*$", RegexOptions.Multiline);
这适用于所有线路
正则表达式细分:
\\这是一个不应包含在匹配中的空白,因为它不在括号表达式中
[A-Za-zåääÅä]+?
查找字母表或空格中的字符
+必须有一个或多个
? 使用贪婪搜索。
[\\s]*
[\\s]查找空白字符
*如果是,则必须有零个或多个
另类
作为regex的替代方案,您可以执行以下操作:
public IEnumerable<string> GetCodes(string data)
{
var lines = data.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
foreach (var line in lines)
{
for (var i = 0; i < line.Length; i++)
{
if (!char.IsLetter(line[i]))
continue;
var text = line.Substring(i).TrimEnd(' ');
yield return text;
break;
}
}
}
这是因为您从ASCII字符表中指定了一个序列。在ascii表中,åäö不直接在Z之后 你可以在这里看到: 因此,您需要一个单独指定这些内容的正则表达式:
[A-Za-zåäöÅÄÖ]+$
因此,完整的正则表达式是:
var re = new Regex("([A-Za-zåäöÅÄÖ]+)$", RegexOptions.Multiline);
var matches = re.Matches(data);
Console.WriteLine(matches[0].Groups[1].Value);
但是,由于您希望在名称中允许空白,就像在新奥尔良一样,您需要允许空白,只需将其包含在正则表达式中:
var re = new Regex("([A-Za-zåäöÅÄÖ ]+)$", RegexOptions.Multiline);
不幸的是,开头和结尾也包含空格:
" New Orleans "
要解决此问题,请首先将正则表达式指定为贪婪,即告诉它使用更少的字符:
new Regex("([A-Za-zåäöÅÄÖ ]+?)$", RegexOptions.Multiline)
问题是,除了新奥尔良,它不需要其他线路。别问我为什么。为了解决这个问题,我告诉正则表达式,数字和文本之间必须有一个空格,并且文本后面可能有一个空格:
var re = new Regex("\\s([A-Za-zåäöÅÄÖ ]+?)[\\s]*$", RegexOptions.Multiline);
这适用于所有线路
正则表达式细分:
\\这是一个不应包含在匹配中的空白,因为它不在括号表达式中
[A-Za-zåääÅä]+?
查找字母表或空格中的字符
+必须有一个或多个
? 使用贪婪搜索。
[\\s]*
[\\s]查找空白字符
*如果是,则必须有零个或多个
另类
作为regex的替代方案,您可以执行以下操作:
public IEnumerable<string> GetCodes(string data)
{
var lines = data.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
foreach (var line in lines)
{
for (var i = 0; i < line.Length; i++)
{
if (!char.IsLetter(line[i]))
continue;
var text = line.Substring(i).TrimEnd(' ');
yield return text;
break;
}
}
}
在C中,您可以使用\p{L}Unicode类别来匹配所有Unicode字符。您可以将零个或多个空白字符与\s*匹配。字符串的结尾是$or\Z或\Z。您需要的单词可以被捕获,并且可以通过从匹配结果中轻松检索此捕获
因此,您可以使用
(\p{L}+)\s*$
或者-如果您计划匹配特定的芬兰语字母等:
(?i)([A-ZÅÄÖ]+)\s*$
见
:
在C中,您可以使用\p{L}Unicode类别来匹配所有Unicode字符。您可以将零个或多个空白字符与\s*匹配。字符串的结尾是$or\Z或\Z。您需要的单词可以被捕获,并且可以通过从匹配结果中轻松检索此捕获
因此,您可以使用
(\p{L}+)\s*$
或者-如果您计划匹配特定的芬兰语字母等:
(?i)([A-ZÅÄÖ]+)\s*$
见
:
也许我用错了,但在最后一行,我只是用这个模式捕捉奥尔良。还有,OP在cityO上提到的空格呢?数据是23941 cityO@LarsKristensen:Fixed@jgauffin哇!自从我第一次看到你的答案后,你的答案肯定扩大了!很好的解释:+1@KLN当前位置你对答案满意吗?或者你需要详细说明吗?也许我用错了,但在最后一行,我只是用这个模式捕捉奥尔良。还有,OP在cityO上提到的空格呢?数据是23941 cityO@LarsKristensen:Fixed@jgauffin哇!自从我第一次看到你的答案后,你的答案肯定扩大了!很好的解释:+1@KLN当前位置你对答案满意吗?或者你需要详细说明吗?相关:相关: