我需要将字符串拆分为两部分。第一部分总是全部大写和数字。第二部分可以是任何东西。
例如:
LOREM IPSUM DOLOR 0,5 SIT Amet consectetur adipiscing elit
应分成
LOREM IPSUM DOLOR 0,5 SIT
和
Amet consectetur adipiscing elit
此外:
LOREM IPSUM DOLOR 0,5 SIT amet 0.3 consectetur adipiscing elit
应分成
LOREM IPSUM DOLOR 0,5 SIT
和
amet 0.3 consectetur adipiscing elit
答案 0 :(得分:4)
你可以试试这个:
Regex regex = new Regex(@"\b(?=[A-Z][a-z])");
string[] result = regex.Split(yourstr, 2);
模式细节:
\b # \b is a word boundary (limit between a member
# of the \w class and an other character
(?= # open a lookahead assertion that means "followed by"
[A-Z][a-z] # an Uppercase and a lowercase letter
)
split方法的第二个参数限制了项目数。
由于您已编辑了问题,并且您现在也希望以第一个小写字母分割,您可以将模式更改为:
Regex regex = new Regex(@"\b(?=[A-Z]?[a-z])");
这使得大写字母可选。
注意:如果要在第一个子字符串末尾修剪潜在的尾随空格,可以将模式更改为:
Regex regex = new Regex(@"\s*\b(?=[A-Z]?[a-z])");
答案 1 :(得分:1)
拆分以下正则表达式
(?<=^[A-Z0-9,\s]+)\s(?![A-Z0-9,]+\b)
示例代码:
string input = "LOREM IPSUM DOLOR 0,5 SIT Amet consectetur adipiscing elit";
string[] parts = Regex.Split(input, @"(?<=^[A-Z0-9,\s]+)\s(?![A-Z0-9,]+\b)");
foreach (string part in parts)
Console.WriteLine(part);
输出:
LOREM IPSUM DOLOR 0,5 SIT
Amet consectetur adipiscing elit
另一个案例:
string input = "LOREM IPSUM DOLOR 0,5 SIT amet 0.3 consectetur adipiscing elit";
string[] parts = Regex.Split(input, @"(?<=^[A-Z0-9,\s]+)\s(?![A-Z0-9,]+\b)");
foreach (string part in parts)
Console.WriteLine(part);
输出:
LOREM IPSUM DOLOR 0,5 SIT
amet 0.3 consectetur adipiscing elit
答案 2 :(得分:0)
我对此进行了分割:(?<=[A-Z]) (?=[A-Z]?[a-z])
答案 3 :(得分:0)
既然你已经提到它总是由两部分组成,这个简单的方法可以起作用:
string text = " LOREM IPSUM DOLOR 0,5 SIT amet 0.3 consectetur adipiscing elit";
string[] words = text.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries);
bool startUpper = words.First().All(Char.IsUpper);
var firstSwitchingCaseWord = words
.Select((word, index) => new { word, index })
.FirstOrDefault(x => startUpper ? x.word.Any(Char.IsLower) : x.word.Any(Char.IsUpper));
if (firstSwitchingCaseWord != null)
{
string firstPart = string.Join(" ", words.Take(firstSwitchingCaseWord.index));
string lastPart = string.Join(" ", words.Skip(firstSwitchingCaseWord.index));
}
答案 4 :(得分:0)
你说第一个字符应该是大写字母,数字或符号。实际上你必须指定ascii如果你要使用下面的那个,如果你与正则表达式混淆,这是简单易懂的。
目前我已经这样做了,如果第一个字符是上限或数字,如果你想添加一个字符,你需要在 {<>期间 if
条件中指定ascii值{1}} 方法
尝试下面的一个 -
isFound
答案 5 :(得分:0)
如果您的字符串仅在第一次出现时被拆分。
string pattern = "[A-Z]?[a-z]+";
string toSplit = "LOREM IPSUM DOLOR 0,5 SIT Amet consectetur adipiscing elit Atest sss";
Match match = Regex.Match(toSplit, pattern);
if (match.Success) {
int index = match.Index;
string splittedVal = toSplit.Substring(0, index);
string secondPart = toSplit.Substring(index, toSplit.Length - index);
}