2011-04-21 13 views
5

tengo la siguiente cadena:secuencia de C# rotura en varias partes

+53.581N -113.587W 4.0 Km W of Edmonton, AB 

En C# ¿Hay alguna forma de romper esta cadena hacia largo. Latt. y luego ciudad estado y descuidar la parte media?

Así que, básicamente quiero 3 cadenas:

Long 
Latt 
Location. 

¿Es esto posible con múltiples formas de esta cadena? Están en el mismo formato, pero obviamente los datos serían diferentes.

Gracias

+0

Uso de expresiones regulares es probablemente su mejor mejor. Pero para formular un patrón concreto, algunos ejemplos más de cadenas de entrada serían útiles. –

Respuesta

4

utilizar una expresión regular para lograr esto - algo así como:

string input = @"+53.581N -113.587W 4.0 Km W of Edmonton, AB"; 
Match match = Regex.Match(input, @"^(?<latitude>[+\-]\d+\.\d+[NS])\s+(?<longitude>[+\-]\d+\.\d+[EW])\s+\d+\.\d+\s+Km\s+[NSEW]\s+of\s+(?<city>.*?),\s*(?<state>.*)$"); 
if (match.Success) { 
    string lattitude = match.Groups["lattitude"].value; 
    string longitude = match.Groups["longitude"].value; 
    string city = match.Groups["city"].value; 
    string state = match.Groups["state"].Value; 
} 
1

Puede utilizar expresiones regulares para capturar esas partes. Ver http://www.c-sharpcorner.com/uploadfile/prasad_1/regexppsd12062005021717am/regexppsd.aspx.

Un patrón que se debe trabajar es la siguiente (teniendo en cuenta el ejemplo que nos ha facilitado):

^([+-]\d+\.\d+\w) ([+-]\d+\.\d+\w) (.*?)$ 
+0

+1 Me gustaría ir por completo para esta. Apuesto a que puedes encontrar algunos patrones para usar – mhenrixon

+0

Puedes usar expresiones regulares y encontrar patrones para cualquier cosa. Eso no agrega nada nuevo. – manojlds

+0

Según la pregunta original, este RegEx no separará la ciudad, el estado y descartará la "parte media". –

1

Uso del string.split (char [], Int32) Sobrecarga

var input = "+53.581N -113.587W 4.0 Km W of Edmonton, AB"; 
var splitArray = input.Split(new char[]{' '},3); 

Se hará obtener el Long, Lat y la ubicación. (Nótese el 3 - esto divide la matriz tres veces)

respuesta a otras respuestas que sugieren Regex:

Por favor, evite expresiones regulares si el formato va a ser el mismo. La opción anterior es mucho más simple y la expresión regular tiende a ser incomprensible muy rápidamente.

+0

Creo que la expresión regular y esta solución son muy buenas. Tiendo a evitar la expresión regular, ya que puede volverse incomprensible rápidamente. Para una solución muy simple, creo que String.Split funciona muy bien. Para tareas más complicadas, tiendo a inclinarme hacia las expresiones regulares. – Justin

+0

@Justin - absolutamente. Pero sigue a KISS. Una expresión regular complicada debería ser simple en el contexto del problema. – manojlds

2

Al igual que en todos los idiomas, es posible con el poder de las expresiones regulares tan increíbles.

Si no está familiarizado con las expresiones regulares, le sugiero que las aprenda. Son increíbles. Seriamente.

Aquí hay un tutorial para empezar a trabajar con las expresiones regulares de .NET:

http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

Cuestiones relacionadas