2010-12-10 9 views
2

У меня ужасное время, пытаясь получить регулярное выражение, определенное для разделения строки, которая будет выглядеть следующим образом. , ,RegEx Pattern Help to Split String

SQL12345,54321SQL  

XXXXX,XXXXX 

Where X = [0-9A-Za-z] and can be repeated one or more times on each side of the delimeter (,). 

Образец RegEx, который я придумал, есть. , ,

"([0-9A-Za-z]+)(,)([0-9A-Za-z]+)" 

Мне нужна только одна группа по обе стороны от метро. Кажется, я получаю результаты, которые выглядят. , ,

myStrArr[0] = "" 
myStrArr[1] = "SQL12345" 
myStrArr[2] = "," 
myStrArr[3] = "54321SQL" 
myStrArr[4] = "" 

Итак, почему я получаю начало линии и конец строки (элементы массива 0 и 4). И как я могу исправить свой шаблон регулярного выражения, чтобы я не возвращал их?

СПАСИБО!

+1

Какой язык? И почему бы вам не использовать простой разделитель строк для запятой? Regex здесь кажется излишним. – 2010-12-10 01:17:10

+0

+1 к ответу Павла. Regex кажется бесполезным здесь. Если вас интересуют только строки, а не шаблоны, то разделение строк должно решить эту задачу. И, основываясь на структуре массива, я предполагаю, что вы используете python. Это так? – Gangadhar 2010-12-10 01:36:32

ответ

-1

Я согласен с чуваком выше. Если вы не заботитесь о других странных символах, таких как | и т. д. Затем вы хотите разделить все, что не является [0-9A-Za-z].

String myString = "SQL12345,54321SQL"; 
    String[] array = myString .split(","); 
1

Код пользователя364939 не компилируется. Попробуйте это:

System.String originalString = "SQL12345,54321SQL"; 
    System.String[] splitArray = originalString.Split(','); 

    System.Console.WriteLine(splitArray[0]); 
    System.Console.WriteLine(splitArray[1]); 

РИСКОВАННЫМ: Я проверил это с C# в Snippet Compiler, но сделал ссылку .NET многословной в надежде, что он будет переводить хорошо на управляемый C++.

Вот управляемый C++ версии:

#include "stdafx.h" 
using namespace System; 

int main(array<System::String ^> ^args) 
{ 
    String^ p = "SQL12345,54321SQL"; 
    array<String^>^ a = p->Split(','); 

    Console::WriteLine(a[0]); 
    Console::WriteLine(a[1]); 

    Console::ReadLine(); 
    return 0; 
} 
0

Paul's answer может быть лучшим решением, если вы не хотите использовать регулярные выражения. Если вы это сделаете, попробуйте этот вариант:

([^,]+),([^,]+)