@ Thomas: Esse código não funciona, resulta com b == "System.Linq.Enumerable..". Correto (e ainda mais simples) seria #b = String.Join("", a.Where(char.IsDigit))
BlueRaja # Danny Pflughoeft 29/05/15
1
Bom ponto, isso vai me ensinar a não testar o código que escrevo no comentário! Você também pode criar uma string a partir de uma matriz de caracteres usando o new string(char[])construtor.
Thomas
1
Regex faz um trabalho muito melhor.
Jason Kelley
@BlueRaja - Danny Pflughoeft Por que não fazer o seu comentário uma resposta adequada para que eu possa votá-lo até :-)
SteveC
NOTA: Se a string contiver vários números, esta resposta os executará todos juntos em um único número. Por exemplo, "a12bcd345" resulta em "12345". (O que pode ser desejável ou não, dependendo da meta.) Isso é diferente da solução Regex mais votada, que retornaria "12" para o caso acima. Isso é importante para casos como números de telefone "555-111-2222".
para suportar números negativos que você poderia usar em Regex.Match(subjectString, @"-?\d+").Valuevez disso
Jon List
45
Esta resposta não está completa (em C #). Ele está apenas obtendo o primeiro número na string. Você precisa itarar nas correspondências: resultString = string.Join (string.Empty, Regex.Matches (subjectString, @ "\ d +"). OfType <Match> () .Select (m => m.Value));
Markus
8
@ Markus: A pergunta afirma "Eu preciso extrair um número contido em uma string", e todos os exemplos mostram um único número presente na string. A iteração sobre um único item não é útil.
Tim Pietzcker
2
@ayman: Ah, as vírgulas são milhares de separadores? Isso exigirá um regex muito mais complexo - que deve ser tratado em uma pergunta separada. Um excelente ponto de partida é o Regular-Expressions.info, que também contém seções no mecanismo de regex do .NET.
Tim Pietzcker
5
@DavidSopko: Do que você está falando? A pergunta original solicitava uma maneira de extrair um único número de uma sequência, tanto no título quanto no corpo da pergunta. Edições subsequentes à pergunta (um ano após a minha resposta e mais tarde) por outras pessoas que não o autor original mudaram o título para "números". Se alguma coisa, essa edição defeituosa deve ser revertida.
Tim Pietzcker
181
Veja como eu limpo os números de telefone para obter apenas os dígitos:
Ótima solução para números inteiros! Esteja ciente de que isso não funcionará se você estiver tentando analisar um número decimal porque o ponto decimal não é um dígito.
Elijah Lofgren
40
use expressão regular ...
Regex re =newRegex(@"\d+");Match m = re.Match("test 66");if(m.Success){Console.WriteLine(string.Format("RegEx found "+ m.Value+" at position "+ m.Index.ToString()));}else{Console.WriteLine("You didn't enter a string containing a number!");}
Regex.Split pode extrair números de seqüências de caracteres. Você obtém todos os números encontrados em uma sequência.
string input ="There are 4 numbers in this string: 40, 30, and 10.";// Split on one or more non-digit characters.string[] numbers =Regex.Split(input,@"\D+");foreach(stringvaluein numbers){if(!string.IsNullOrEmpty(value)){int i =int.Parse(value);Console.WriteLine("Number: {0}", i);}}
bom, mas se você tiver espaços entre os números na cadeia original, ele fornecerá uma cadeia concatenada grande com os dois números unidos (sem espaço)
Mohammad Zekrallah
11
Basta usar um RegEx para corresponder à string e converter:
Match match =Regex.Match(test ,@"(\d+)");if(match.Success){returnint.Parse(match.Groups[1].Value);}
Esta é a melhor resposta que me deu o que eu queria, que é uma matriz de vários números na string. Se ao menos pudesse ignorar vírgulas em números (separador de milhar), isso seria perfeito! :-)
Sagar
9
Você pode fazer isso usando a Stringpropriedade como abaixo:
A pergunta não afirma explicitamente que você deseja apenas os caracteres de 0 a 9, mas não seria exagero acreditar que isso é verdade no seu conjunto de exemplos e comentários. Então, aqui está o código que faz isso.
string digitsOnly =String.Empty;foreach(char c in s){// Do not use IsDigit as it will include more than the characters 0 through to 9if(c >='0'&& c <='9') digitsOnly += c;}
Por que você não deseja usar Char.IsDigit () - Os números incluem caracteres como frações, subscritos, sobrescritos, algarismos romanos, numeradores de moeda, números encapsulados e dígitos específicos do script.
// Pull out only the numbers from the string using LINQvar numbersFromString =newString(input.Where(x => x >='0'&& x <='9').ToArray());var numericVal =Int32.Parse(numbersFromString);
Este código é usado para encontrar todo o valor inteiro em uma string.
Manoj Gupta 27/02
Seria melhor adicionar alguma descrição diretamente à resposta do que publicá-la separadamente como um comentário. Os comentários nem sempre são visíveis imediatamente.
John Dvorak
2
Uma abordagem interessante é fornecida aqui por Ahmad Mageed, usa Regex e stringbuilder para extrair os números inteiros na ordem em que eles aparecem na string.
Um exemplo usando o Regex.Split com base na postagem de Ahmad Mageed é o seguinte:
var dateText ="MARCH-14-Tue";string splitPattern =@"[^\d]";string[] result =Regex.Split(dateText, splitPattern);var finalresult =string.Join("", result.Where(e =>!String.IsNullOrEmpty(e)));intDayDateInt=0;int.TryParse(finalresult,outDayDateInt);
//Fast, C Language friendlypublicstaticintGetNumber(stringText){int val =0;for(int i =0; i <Text.Length; i++){char c =Text[i];if(c >='0'&& c <='9'){
val *=10;//(ASCII code reference)
val += c -48;}}return val;}
stringvar="Hello345wor705Ld";string alpha =string.Empty;string numer =string.Empty;foreach(char str invar){if(char.IsDigit(str))
numer += str.ToString();else
alpha += str.ToString();}Console.WriteLine("String is: "+ alpha);Console.WriteLine("Numeric character is: "+ numer);Console.Read();
string s ="kg g L000145.50\r\n";char theCharacter ='.';var getNumbers =(from t in s
wherechar.IsDigit(t)|| t.Equals(theCharacter)select t).ToArray();var _str =string.Empty;foreach(var item in getNumbers){
_str += item.ToString();}double _dou =Convert.ToDouble(_str);MessageBox.Show(_dou.ToString("#,##0.00"));
1.5
? Notação exponencial como1.5E45
?Respostas:
passar a corda e usar
Char.IsDigit
fonte
b == "System.Linq.Enumerable.."
. Correto (e ainda mais simples) seria #b = String.Join("", a.Where(char.IsDigit))
new string(char[])
construtor.\d+
é a regex para um número inteiro. assimretorna uma string contendo a primeira ocorrência de um número em
subjectString
.Int32.Parse(resultString)
lhe dará o número.fonte
Regex.Match(subjectString, @"-?\d+").Value
vez dissoVeja como eu limpo os números de telefone para obter apenas os dígitos:
fonte
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
use expressão regular ...
fonte
O que eu uso para obter números de telefone sem pontuação ...
fonte
Regex.Split pode extrair números de seqüências de caracteres. Você obtém todos os números encontrados em uma sequência.
Resultado:
fonte
Aqui está uma
Linq
versão:fonte
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?from t .. select t
redundância, mas de qualquer maneira, aplausos.Outra solução simples usando o Regex Você deve usar este
e o código é
fonte
Você também pode tentar isso
fonte
Basta usar um RegEx para corresponder à string e converter:
fonte
Aqui está outra
Linq
abordagem que extrai o primeiro número de uma string.Exemplos:
fonte
Para aqueles que desejam um número decimal a partir de uma string com Regex na linha DUAS :
A mesma coisa se aplica a flutuar , longo , etc ...
fonte
fonte
Você pode fazer isso usando a
String
propriedade como abaixo:que fornece apenas o número da string.
fonte
fonte
A pergunta não afirma explicitamente que você deseja apenas os caracteres de 0 a 9, mas não seria exagero acreditar que isso é verdade no seu conjunto de exemplos e comentários. Então, aqui está o código que faz isso.
Por que você não deseja usar Char.IsDigit () - Os números incluem caracteres como frações, subscritos, sobrescritos, algarismos romanos, numeradores de moeda, números encapsulados e dígitos específicos do script.
fonte
Obtenha todos os números na string. Portanto, se você usar o exemplo '1 mais 2', ele receberá '12'.
fonte
Método de extensão para obter todos os números positivos contidos em uma string:
Se você também deseja números negativos, modifique esse código para manipular o sinal de menos (
-
)Dada esta entrada:
A lista de números resultante será:
fonte
se o número tiver casas decimais, você pode usar abaixo
resultados :
Amostra: https://dotnetfiddle.net/IrtqVt
fonte
O inverso de uma das respostas para esta pergunta: Como remover números da string usando o Regex.Replace?
fonte
fonte
Uma abordagem interessante é fornecida aqui por Ahmad Mageed, usa Regex e stringbuilder para extrair os números inteiros na ordem em que eles aparecem na string.
Um exemplo usando o Regex.Split com base na postagem de Ahmad Mageed é o seguinte:
fonte
Aqui está o meu algoritmo
fonte
aqui está a minha solução
fonte
Você precisará usar o Regex como
\d+
\d
corresponde aos dígitos na sequência especificada.fonte
fonte
fonte
Usando @ tim-pietzcker answer acima , o seguinte funcionará
PowerShell
.fonte
Com base na última amostra, criei um método:
fonte