簡體   English   中英

正則表達式分割字符串和數字

[英]Regular expression to split string and number

我有一個形式的字符串:

codename123

是否有一個正則表達式可以與Regex.Split()一起使用,將字母部分和數字部分分成兩個元素的字符串數組?

我知道您要求使用Split方法,但作為替代方法,您可以使用命名捕獲組:

var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)");
var match = numAlpha.Match("codename123");

var alpha = match.Groups["Alpha"].Value;
var num = match.Groups["Numeric"].Value;
splitArray = Regex.Split("codename123", @"(?<=\p{L})(?=\p{N})");

將在Unicode字母和Unicode數字之間分割。

如果你的字符串總是那種形式,那么正則表達式對此有點沉重。 你可以用

"codename123".IndexOfAny(new char[] {'1','2','3','4','5','6','7','8','9','0'})

以及對Substring的兩次調用。

有點冗長,但是

Regex.Split( "codename123", @"(?<=[a-zA-Z])(?=\d)" );

你能更具體地了解你的要求嗎? 也許還有一些其他的輸入例子。

IMO,找到比賽會更容易,比如:

Regex.Matches("codename123", @"[a-zA-Z]+|\d+")
     .Cast<Match>()
     .Select(m => m.Value)
     .ToArray();

而不是使用Regex.Split

另一種更簡單的方法是

string originalstring = "codename123";
string alphabets = string.empty;
string numbers = string.empty;

foreach (char item in mainstring)
{
   if (Char.IsLetter(item))
   alphabets += item;
   if (Char.IsNumber(item))
   numbers += item;
}

好吧,只是一行: Regex.Split("codename123", "^([az]+)");

這段代碼是用java / logic編寫的,應該在別處相同

public String splitStringAndNumber(String string) {
    String pattern = "(?<Alpha>[a-zA-Z]*)(?<Numeric>[0-9]*)";

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(string);
    if (m.find()) {
        return (m.group(1) + " " + m.group(2));
    }
    return "";
}

暫無
暫無

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

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