@ Thomas: Kode itu tidak berfungsi, hasilnya dengan b == "System.Linq.Enumerable..". Benar (dan bahkan lebih sederhana) adalahb = String.Join("", a.Where(char.IsDigit))
BlueRaja - Danny Pflughoeft
1
Poin bagus, itu akan mengajari saya untuk tidak menguji kode yang saya tulis dalam komentar! Anda juga bisa membuat string dari array char menggunakan new string(char[])konstruktor.
Thomas
1
Regex melakukan pekerjaan yang jauh lebih baik.
Jason Kelley
@BlueRaja - Danny Pflughoeft Mengapa tidak membuat komentar Anda sebagai jawaban yang tepat sehingga saya dapat memilihnya :-)
SteveC
CATATAN: Jika string berisi beberapa angka, jawaban ini akan menjalankan semuanya menjadi satu nomor. Misalnya "a12bcd345" menghasilkan "12345". (Yang mungkin diinginkan atau tidak, tergantung pada tujuannya.) Ini berbeda dari solusi Regex yang terpilih, yang akan mengembalikan "12" untuk kasus di atas. Ini penting untuk kasus-kasus seperti nomor telepon "555-111-2222".
untuk mendukung angka negatif yang dapat Anda gunakan Regex.Match(subjectString, @"-?\d+").Valuesebagai gantinya
Jon List
45
Jawaban ini tidak lengkap (dalam C #). Itu hanya mendapatkan angka pertama dalam string. Anda harus mengulangi pertandingan: resultString = string.Join (string.Empty, Regex.Matches (subjectString, @ "\ d +"). OfType <Match> () .Pilih (m => m.Value));
Markus
8
@Markus: Negara-negara pertanyaan "Saya perlu untuk mengambil sebuah nomor yang terkandung dalam string", dan semua contoh menunjukkan nomor tunggal yang hadir dalam string. Mengulang-ulang satu item tidak berguna.
Tim Pietzcker
2
@ Jayman: Oh, koma itu ribuan pemisah? Itu akan membutuhkan regex yang jauh lebih kompleks - yang harus ditangani dalam pertanyaan terpisah. Titik awal yang sangat baik adalah Regular-Expressions.info yang juga berisi bagian pada mesin regex .NET.
Tim Pietzcker
5
@ Davidvidopko: Apa yang kamu bicarakan? Pertanyaan awal meminta cara untuk mengekstraksi nomor tunggal dari string, baik dalam judul maupun dalam tubuh pertanyaan. Pengeditan selanjutnya untuk pertanyaan (setahun setelah jawaban saya dan kemudian) oleh orang-orang selain penulis asli mengubah judul menjadi "angka". Jika ada, edit yang salah itu harus dibatalkan.
Tim Pietzcker
181
Inilah cara saya membersihkan nomor telepon untuk mendapatkan digit saja:
solusi yang sangat elegan .. Saya suka penggunaan linq
Leo Gurdian
1
Solusi bagus untuk bilangan bulat! Ketahuilah bahwa ini tidak akan berhasil jika Anda mencoba menguraikan angka desimal karena titik desimal bukanlah angka.
Elijah Lofgren
40
gunakan ekspresi reguler ...
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. Plit dapat mengekstraksi angka dari string. Anda mendapatkan semua angka yang ditemukan dalam sebuah string.
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);}}
bagus tetapi jika Anda memiliki spasi di antara angka-angka dalam string asli maka itu akan memberi Anda 1 string bersambung besar dengan kedua angka bergabung (tidak ada spasi)
Mohammad Zekrallah
11
Cukup gunakan RegEx untuk mencocokkan string, lalu konversi:
Match match =Regex.Match(test ,@"(\d+)");if(match.Success){returnint.Parse(match.Groups[1].Value);}
Ini adalah jawaban terbaik yang memberi saya apa yang saya inginkan, yaitu array dari beberapa angka dalam string. Kalau saja itu bisa mengabaikan koma dalam angka (seribu pemisah) maka itu akan sempurna! :-)
Sagar
9
Anda dapat melakukan ini menggunakan Stringproperti seperti di bawah ini:
Pertanyaannya tidak secara eksplisit menyatakan bahwa Anda hanya ingin karakter 0 hingga 9 tetapi tidak akan sulit untuk percaya bahwa itu benar dari set contoh Anda dan komentar. Jadi di sini adalah kode yang melakukan itu.
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;}
Mengapa Anda tidak ingin menggunakan Char.IsDigit () - Angka termasuk karakter seperti pecahan, subskrip, superskrip, angka Romawi, pembilang mata uang, angka yang dilingkari, dan angka khusus skrip.
Terima kasih banyak atas jawaban ini. Saya menggunakan C # dan VS2017 dan berusaha mencari tahu bagaimana cara menemukan nilai. Sekali lagi terima kasih atas jawaban Anda.
// 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);
Kode ini digunakan untuk menemukan semua nilai integer dalam sebuah string.
Manoj Gupta
Akan lebih baik untuk menambahkan beberapa deskripsi langsung ke jawaban daripada mengirimnya secara terpisah sebagai komentar. Komentar tidak selalu langsung terlihat.
John Dvorak
2
Pendekatan yang menarik disediakan di sini oleh Ahmad Mageed, menggunakan Regex dan stringbuilder untuk mengekstrak bilangan bulat dalam urutan di mana mereka muncul dalam string.
Contoh menggunakan Regex.Split berdasarkan pos oleh Ahmad Mageed adalah sebagai berikut:
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
? Seperti notasi eksponensial1.5E45
?Jawaban:
pergi melalui string dan gunakan
Char.IsDigit
sumber
b == "System.Linq.Enumerable.."
. Benar (dan bahkan lebih sederhana) adalahb = String.Join("", a.Where(char.IsDigit))
new string(char[])
konstruktor.\d+
adalah regex untuk angka integer. Begitumengembalikan string yang berisi kemunculan pertama suatu angka di
subjectString
.Int32.Parse(resultString)
kemudian akan memberikan nomornya.sumber
Regex.Match(subjectString, @"-?\d+").Value
sebagai gantinyaInilah cara saya membersihkan nomor telepon untuk mendapatkan digit saja:
sumber
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
gunakan ekspresi reguler ...
sumber
Apa yang saya gunakan untuk mendapatkan Nomor Telepon tanpa tanda baca ...
sumber
Regex. Plit dapat mengekstraksi angka dari string. Anda mendapatkan semua angka yang ditemukan dalam sebuah string.
Keluaran:
sumber
Ini sebuah
Linq
versi:sumber
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?from t .. select t
redundansi, tapi bagaimanapun, bersorak.Solusi sederhana lain menggunakan Regex Anda harus menggunakan ini
dan kodenya
sumber
Anda juga dapat mencoba ini
sumber
Cukup gunakan RegEx untuk mencocokkan string, lalu konversi:
sumber
Berikut adalah
Linq
pendekatan lain yang mengekstrak angka pertama dari sebuah string.Contoh:
sumber
Bagi mereka yang menginginkan angka desimal dari string dengan Regex di baris DUA :
Hal yang sama berlaku untuk mengapung , panjang , dll ...
sumber
sumber
Anda dapat melakukan ini menggunakan
String
properti seperti di bawah ini:yang hanya memberikan angka dari string.
sumber
sumber
Pertanyaannya tidak secara eksplisit menyatakan bahwa Anda hanya ingin karakter 0 hingga 9 tetapi tidak akan sulit untuk percaya bahwa itu benar dari set contoh Anda dan komentar. Jadi di sini adalah kode yang melakukan itu.
Mengapa Anda tidak ingin menggunakan Char.IsDigit () - Angka termasuk karakter seperti pecahan, subskrip, superskrip, angka Romawi, pembilang mata uang, angka yang dilingkari, dan angka khusus skrip.
sumber
Dapatkan semua angka dalam string. Jadi jika Anda menggunakan untuk contoh '1 plus 2' itu akan mendapatkan '12'.
sumber
Metode ekstensi untuk mendapatkan semua angka positif yang terkandung dalam string:
Jika Anda ingin angka negatif juga cukup modifikasi kode ini untuk menangani tanda minus (
-
)Diberikan masukan ini:
Daftar nomor yang dihasilkan adalah:
sumber
jika angka tersebut memiliki titik desimal, Anda dapat menggunakan di bawah ini
hasil:
Contoh: https://dotnetfiddle.net/IrtqVt
sumber
Apakah kebalikan dari salah satu jawaban untuk pertanyaan ini: Bagaimana menghapus angka dari string menggunakan Regex.Replace?
sumber
sumber
Pendekatan yang menarik disediakan di sini oleh Ahmad Mageed, menggunakan Regex dan stringbuilder untuk mengekstrak bilangan bulat dalam urutan di mana mereka muncul dalam string.
Contoh menggunakan Regex.Split berdasarkan pos oleh Ahmad Mageed adalah sebagai berikut:
sumber
Ini Algoritma saya
sumber
ini solusinya
sumber
Anda harus menggunakan Regex sebagai
\d+
\d
cocok dengan digit dalam string yang diberikan.sumber
sumber
sumber
Menggunakan jawaban @ tim-pietzcker dari atas , yang berikut ini akan berhasil
PowerShell
.sumber
Berdasarkan sampel terakhir saya membuat metode:
sumber