簡體   English   中英

檢索與空白字母

[英]Retrieve Alphabet with white space

我只想檢索字母,但代碼不足以檢索它。

我想念什么?

[A-Öa-ö]+$

16440 dallas
23941 cityO     < You also have white space after "O"
931 00 Texas
10581 New Orleans

這是因為您從ASCII字符表中指定了一個序列。 並且åäö不在ascii表中緊隨Z之后。

您可以在這里看到它: http : //www.asciitable.com/

因此,您需要的是一個分別指定這些內容的正則表達式:

[A-Za-zåäöÅÄÖ]+$

因此,完整的正則表達式為:

var re = new Regex("([A-Za-zåäöÅÄÖ]+)$", RegexOptions.Multiline);
var matches = re.Matches(data);
Console.WriteLine(matches[0].Groups[1].Value);

但是,由於要在名稱中允許使用空格(例如“ New Orleans”),因此需要允許使用,只需將其包含在正則表達式中即可:

var re = new Regex("([A-Za-zåäöÅÄÖ ]+)$", RegexOptions.Multiline);

不幸的是,在開頭和結尾都包含空格:

" New Orleans "

要解決此問題,請先將正則表達式指定為貪婪,即告訴它使用更少的字符:

new Regex("([A-Za-zåäöÅÄÖ ]+?)$", RegexOptions.Multiline)

這樣做的問題是,除了New orleans ,它不采用其他路線。 不要問我為什么。 為了解決這個問題,我告訴正則表達式,它在數字和文本之間必須有一個空格,並且文本之后可能會有一個空格:

var re = new Regex("\\s([A-Za-zåäöÅÄÖ ]+?)[\\s]*$", RegexOptions.Multiline);

適用於所有行。

正則表達式細分:

  • \\\\s單個空格(不應包含在匹配項中,因為它不在括號表達式中)
  • ([A-Za-zåäöÅÄÖ ]+?)
    • 查找字母或空格中的字符
    • +必須有一個或多個
    • ? 使用貪婪搜索。
  • [\\\\s]*
    • [\\\\s]查找空格字符
    • *如果為零,則必須為零或更多

另類

作為正則表達式的替代方法,您可以執行以下操作:

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

調用方式如下:

var codes = GetCodes(yourData).ToList();

在C#中,可以使用\\p{L} Unicode類別類來匹配所有Unicode字符。 您可以將零個或多個空格字符與\\s*匹配。 字符串的結尾是$ (或\\Z\\z )。 可以捕獲您需要的單詞,並且可以通過GroupCollection從匹配結果中輕松檢索此捕獲。

因此,您可以使用

(\p{L}+)\s*$

或-如果您打算匹配特定的芬蘭語等字母:

(?i)([A-ZÅÄÖ]+)\s*$

正則表達式演示

C#演示

var strs = new string[] {"16440 dallas", "23941 cityO     ", "931 00 Texas", "10581 New Orleans"};
foreach (var s in strs) {
    var match = Regex.Match(s, @"(\p{L}+)\s*$");
    if (match.Success)
    {
        Console.WriteLine(match.Groups[1].Value);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM