@Thomas: Dieser Code funktioniert nicht, er ergibt sich mit b == "System.Linq.Enumerable..". Richtig (und noch einfacher) wäreb = String.Join("", a.Where(char.IsDigit))
BlueRaja - Danny Pflughoeft
1
Guter Punkt, das wird mich lehren, den Code, den ich in einem Kommentar schreibe, nicht zu testen! Sie können mit dem new string(char[])Konstruktor auch eine Zeichenfolge aus einem char-Array erstellen .
Thomas
1
Regex macht einen viel besseren Job.
Jason Kelley
@ BlueRaja - Danny Pflughoeft Warum nicht Ihren Kommentar zu einer richtigen Antwort machen, damit ich darüber abstimmen kann :-)
SteveC
HINWEIS: Wenn die Zeichenfolge mehrere Zahlen enthält, werden sie bei dieser Antwort alle zu einer einzigen Zahl zusammengefasst. Beispielsweise führt "a12bcd345" zu "12345". (Was je nach Ziel wünschenswert oder nicht wünschenswert sein kann.) Dies unterscheidet sich von der am besten bewerteten Regex-Lösung, die für den obigen Fall "12" zurückgeben würde. Dies ist wichtig für Fälle wie die Telefonnummern "555-111-2222".
ToolmakerSteve
546
\d+ist der reguläre Ausdruck für eine Ganzzahl. Damit
um negative Zahlen zu unterstützen, könnten Sie Regex.Match(subjectString, @"-?\d+").Valuestattdessen verwenden
Jon List
45
Diese Antwort ist nicht vollständig (in C #). Es wird nur die erste Zahl in der Zeichenfolge abgerufen. Sie müssen die Übereinstimmungen durchlaufen: resultString = string.Join (string.Empty, Regex.Matches (subjectString, @ "\ d +"). OfType <Match> () .Select (m => m.Value));
Markus
8
@Markus: Die Frage lautet "Ich muss eine in einer Zeichenfolge enthaltene Zahl extrahieren ", und alle Beispiele zeigen, dass eine einzelne Zahl in der Zeichenfolge vorhanden ist. Das Iterieren über ein einzelnes Element ist nicht sinnvoll.
Tim Pietzcker
2
@ayman: Oh, die Kommas sind Tausende Trennzeichen? Dies erfordert eine viel komplexere Regex - die in einer separaten Frage behandelt werden sollte. Ein ausgezeichneter Ausgangspunkt ist Regular-Expressions.info, das auch Abschnitte zur Regex-Engine von .NET enthält.
Tim Pietzcker
5
@ DavidSopko: Worüber sprichst du? In der ursprünglichen Frage wurde nach einer Möglichkeit gefragt, eine einzelne Zahl aus einer Zeichenfolge zu extrahieren, sowohl im Titel als auch im Fragentext. Nachfolgende Änderungen an der Frage (ein Jahr nach meiner Antwort und später) durch andere Personen als den ursprünglichen Autor haben den Titel in "Zahlen" geändert. Wenn überhaupt, sollte diese fehlerhafte Bearbeitung zurückgesetzt werden.
Tim Pietzcker
180
So bereinige ich Telefonnummern, um nur die Ziffern zu erhalten:
sehr elegante Lösung .. Ich mag die Verwendung von linq
Leo Gurdian
1
Gute Lösung für ganze Zahlen! Beachten Sie, dass dies nicht funktioniert, wenn Sie versuchen, eine Dezimalzahl zu analysieren, da der Dezimalpunkt keine Ziffer ist.
Elijah Lofgren
40
Verwenden Sie reguläre Ausdrücke ...
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 kann Zahlen aus Zeichenfolgen extrahieren. Sie erhalten alle Zahlen, die in einer Zeichenfolge gefunden werden.
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);}}
Dies ist die beste Antwort, die mir das gab, was ich wollte, nämlich ein Array mit mehreren Zahlen innerhalb einer Zeichenfolge. Wenn es nur Kommas in Zahlen (Tausendertrennzeichen) ignorieren könnte, wäre das perfekt! :-)
Sagar
9
Sie können dies mit der folgenden StringEigenschaft tun :
Die Frage besagt nicht explizit, dass Sie nur die Zeichen 0 bis 9 möchten, aber es wäre nicht schwer zu glauben, dass dies anhand Ihres Beispielsatzes und Ihrer Kommentare zutrifft. Hier ist also der Code, der das macht.
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;}
Warum Sie Char.IsDigit () nicht verwenden möchten - Zahlen enthalten Zeichen wie Brüche, Indizes, hochgestellte Zeichen, römische Ziffern, Währungszähler, eingekreiste Zahlen und skriptspezifische Ziffern.
Vielen Dank für diese Antwort. Ich verwende C # und VS2017 und habe versucht herauszufinden, wie ich den Wert finde. Nochmals vielen Dank für Ihre Antwort.
// 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);
Dieser Code wird verwendet, um alle ganzzahligen Werte in einer Zeichenfolge zu finden.
Manoj Gupta
Es wäre besser, eine Beschreibung direkt in die Antwort einzufügen, als sie separat als Kommentar zu veröffentlichen. Kommentare sind nicht immer sofort sichtbar.
John Dvorak
2
Ein interessanter Ansatz wird hier von Ahmad Mageed bereitgestellt, der Regex und Stringbuilder verwendet, um die Ganzzahlen in der Reihenfolge zu extrahieren, in der sie in der Zeichenfolge erscheinen.
Ein Beispiel für die Verwendung von Regex.Split basierend auf dem Beitrag von Ahmad Mageed lautet wie folgt:
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
? Exponentielle Notation wie1.5E45
?Antworten:
gehe durch die Schnur und benutze
Char.IsDigit
quelle
b == "System.Linq.Enumerable.."
. Richtig (und noch einfacher) wäreb = String.Join("", a.Where(char.IsDigit))
new string(char[])
Konstruktor auch eine Zeichenfolge aus einem char-Array erstellen .\d+
ist der reguläre Ausdruck für eine Ganzzahl. DamitGibt eine Zeichenfolge zurück, die das erste Vorkommen einer Zahl in enthält
subjectString
.Int32.Parse(resultString)
wird Ihnen dann die Nummer geben.quelle
Regex.Match(subjectString, @"-?\d+").Value
stattdessen verwendenSo bereinige ich Telefonnummern, um nur die Ziffern zu erhalten:
quelle
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
Verwenden Sie reguläre Ausdrücke ...
quelle
Was ich benutze, um Telefonnummern ohne Interpunktion zu erhalten ...
quelle
Regex.Split kann Zahlen aus Zeichenfolgen extrahieren. Sie erhalten alle Zahlen, die in einer Zeichenfolge gefunden werden.
Ausgabe:
quelle
Hier ist eine
Linq
Version:quelle
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?from t .. select t
Redundanz einfach nicht , aber trotzdem, Prost.Eine weitere einfache Lösung mit Regex Sie sollten diese verwenden müssen
und der Code ist
quelle
Sie können dies auch versuchen
quelle
Verwenden Sie einfach ein RegEx, um die Zeichenfolge abzugleichen, und konvertieren Sie dann:
quelle
Hier ist ein anderer
Linq
Ansatz, der die erste Zahl aus einer Zeichenfolge extrahiert.Beispiele:
quelle
Für diejenigen, die eine Dezimalzahl aus einer Zeichenfolge mit Regex in ZWEI Zeilen wünschen :
Gleiches gilt für Float , Long , etc ...
quelle
quelle
Sie können dies mit der folgenden
String
Eigenschaft tun :Das gibt nur die Nummer aus der Zeichenfolge.
quelle
quelle
Die Frage besagt nicht explizit, dass Sie nur die Zeichen 0 bis 9 möchten, aber es wäre nicht schwer zu glauben, dass dies anhand Ihres Beispielsatzes und Ihrer Kommentare zutrifft. Hier ist also der Code, der das macht.
Warum Sie Char.IsDigit () nicht verwenden möchten - Zahlen enthalten Zeichen wie Brüche, Indizes, hochgestellte Zeichen, römische Ziffern, Währungszähler, eingekreiste Zahlen und skriptspezifische Ziffern.
quelle
Holen Sie sich alle Zahlen in der Zeichenfolge. Wenn Sie also zum Beispiel '1 plus 2' verwenden, wird '12' angezeigt.
quelle
Erweiterungsmethode, um alle positiven Zahlen in einer Zeichenfolge abzurufen:
Wenn Sie auch negative Zahlen möchten, ändern Sie diesen Code einfach, um das Minuszeichen zu verarbeiten (
-
) zu verarbeiten.Angesichts dieser Eingabe:
Die resultierende Zahlenliste lautet:
quelle
Wenn die Zahl Dezimalstellen hat, können Sie diese unten verwenden
Ergebnisse :
Beispiel: https://dotnetfiddle.net/IrtqVt
quelle
Hat sich eine der Antworten auf diese Frage umgekehrt: Wie entferne ich Zahlen mit Regex.Replace aus der Zeichenfolge?
quelle
quelle
Ein interessanter Ansatz wird hier von Ahmad Mageed bereitgestellt, der Regex und Stringbuilder verwendet, um die Ganzzahlen in der Reihenfolge zu extrahieren, in der sie in der Zeichenfolge erscheinen.
Ein Beispiel für die Verwendung von Regex.Split basierend auf dem Beitrag von Ahmad Mageed lautet wie folgt:
quelle
Hier ist mein Algorithmus
quelle
Hier ist meine Lösung
quelle
Sie müssen Regex als verwenden
\d+
\d
stimmt mit den Ziffern in der angegebenen Zeichenfolge überein.quelle
quelle
quelle
Wenn Sie die Antwort von @ tim-pietzcker von oben verwenden , funktioniert Folgendes
PowerShell
.quelle
Basierend auf dem letzten Beispiel habe ich eine Methode erstellt:
quelle