문자열에 포함 된 숫자를 찾아 추출해야합니다.
예를 들어 다음 문자열에서
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
어떻게해야합니까?
1.5
? 1.5E45
? 와 같은 지수 표기법
문자열에 포함 된 숫자를 찾아 추출해야합니다.
예를 들어 다음 문자열에서
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
어떻게해야합니까?
1.5
? 1.5E45
? 와 같은 지수 표기법
답변:
문자열을 통해 사용 Char.IsDigit
string a = "str123";
string b = string.Empty;
int val;
for (int i=0; i< a.Length; i++)
{
if (Char.IsDigit(a[i]))
b += a[i];
}
if (b.Length>0)
val = int.Parse(b);
b == "System.Linq.Enumerable.."
. 것이 올바른 (그리고 더 간단)b = String.Join("", a.Where(char.IsDigit))
new string(char[])
생성자를 사용하여 char 배열에서 문자열을 만들 수도 있습니다 .
\d+
정수의 정규식입니다. 그래서
//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"\d+").Value;
의 숫자가 처음 포함 된 문자열을 반환합니다 subjectString
.
Int32.Parse(resultString)
그런 다음 번호를 알려줍니다.
Regex.Match(subjectString, @"-?\d+").Value
대신 사용할 수있는 음수를 지원하기 위해
전화 번호를 정리하여 숫자 만 얻는 방법은 다음과 같습니다.
string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
Regex.Split은 문자열에서 숫자를 추출 할 수 있습니다. 문자열에서 찾은 모든 숫자를 얻습니다.
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 (string value in numbers)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
Console.WriteLine("Number: {0}", i);
}
}
산출:
번호 : 4 번호 : 40 번호 : 30 번호 : 10
Linq
버전은 다음과 같습니다 .
string s = "123iuow45ss";
var getNumbers = (from t in s
where char.IsDigit(t)
select t).ToArray();
Console.WriteLine(new string(getNumbers));
"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?
from t .. select t
중복을 좋아하지 않지만 어쨌든 건배.
Regex를 사용하는 또 다른 간단한 솔루션 이것을 사용해야합니다.
using System.Text.RegularExpressions;
코드는
string var = "Hello3453232wor705Ld";
string mystr = Regex.Replace(var, @"\d", "");
string mynumber = Regex.Replace(var, @"\D", "");
Console.WriteLine(mystr);
Console.WriteLine(mynumber);
당신은 또한 이것을 시도 할 수 있습니다
string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
다음은 Linq
문자열에서 첫 번째 숫자를 추출하는 또 다른 방법입니다.
string input = "123 foo 456";
int result = 0;
bool success = int.TryParse(new string(input
.SkipWhile(x => !char.IsDigit(x))
.TakeWhile(x => char.IsDigit(x))
.ToArray()), out result);
예 :
string input = "123 foo 456"; // 123
string input = "foo 456"; // 456
string input = "123 foo"; // 123
string input = "Hello 20, I am 30 and he is 40";
var numbers = Regex.Matches(input, @"\d+").OfType<Match>().Select(m => int.Parse(m.Value)).ToArray();
이 질문에는 문자 0 ~ 9 만 원한다고 명시 적으로 명시되어 있지 않지만 예제 세트 및 주석에서 사실이라고 믿기에는 무리가 없습니다. 이를 수행하는 코드는 다음과 같습니다.
string digitsOnly = String.Empty;
foreach (char c in s)
{
// Do not use IsDigit as it will include more than the characters 0 through to 9
if (c >= '0' && c <= '9') digitsOnly += c;
}
Char.IsDigit ()를 사용하지 않으려는 이유-숫자에는 분수, 첨자, 위첨자, 로마 숫자, 통화 분자, 둘러싼 숫자 및 스크립트 별 숫자와 같은 문자가 포함됩니다.
문자열에 포함 된 모든 양수 를 가져 오는 확장 방법 :
public static List<long> Numbers(this string str)
{
var nums = new List<long>();
var start = -1;
for (int i = 0; i < str.Length; i++)
{
if (start < 0 && Char.IsDigit(str[i]))
{
start = i;
}
else if (start >= 0 && !Char.IsDigit(str[i]))
{
nums.Add(long.Parse(str.Substring(start, i - start)));
start = -1;
}
}
if (start >= 0)
nums.Add(long.Parse(str.Substring(start, str.Length - start)));
return nums;
}
음수를 원한다면이 코드를 수정하여 빼기 부호 (-
)
이 입력이 주어지면 :
"I was born in 1989, 27 years ago from now (2016)"
결과 숫자 목록은 다음과 같습니다.
[1989, 27, 2016]
숫자에 소수점이 있으면 아래에서 사용할 수 있습니다
using System;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
Console.WriteLine(Regex.Match("anything 876.8 anything", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("anything 876 anything", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("$876435", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("$876.435", @"\d+\.*\d*").Value);
}
}
}
결과 :
"아무것도 876.8 아무것도"==> 876.8
"anything 876 anything"==> 876
"$ 876435"==> 876435
"$ 876.435"==> 876.435
이 질문에 대한 답변 중 하나의 반대 : Regex.Replace를 사용하여 문자열에서 숫자를 제거하는 방법은 무엇입니까?
// Pull out only the numbers from the string using LINQ
var numbersFromString = new String(input.Where(x => x >= '0' && x <= '9').ToArray());
var numericVal = Int32.Parse(numbersFromString);
string verificationCode ="dmdsnjds5344gfgk65585";
string code = "";
Regex r1 = new Regex("\\d+");
Match m1 = r1.Match(verificationCode);
while (m1.Success)
{
code += m1.Value;
m1 = m1.NextMatch();
}
흥미로운 접근 방식이 제공됩니다 여기 아마드 Mageed에 의해, 그들은 문자열에 나타나는 순서대로 정수를 추출하는 정규식과의 StringBuilder를 사용합니다.
Ahmad Mageed의 게시물을 기반으로 Regex.Split을 사용하는 예는 다음과 같습니다.
var dateText = "MARCH-14-Tue";
string splitPattern = @"[^\d]";
string[] result = Regex.Split(dateText, splitPattern);
var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e)));
int DayDateInt = 0;
int.TryParse(finalresult, out DayDateInt);
여기 내 해결책이 있습니다
string var = "Hello345wor705Ld";
string alpha = string.Empty;
string numer = string.Empty;
foreach (char str in var)
{
if (char.IsDigit(str))
numer += str.ToString();
else
alpha += str.ToString();
}
Console.WriteLine("String is: " + alpha);
Console.WriteLine("Numeric character is: " + numer);
Console.Read();
static string GetdigitFromString(string str)
{
char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] inputArray = str.ToCharArray();
string ext = string.Empty;
foreach (char item in inputArray)
{
if (refArray.Contains(item))
{
ext += item.ToString();
}
}
return ext;
}
string s = "kg g L000145.50\r\n";
char theCharacter = '.';
var getNumbers = (from t in s
where char.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"));
마지막 샘플을 기반으로 메소드를 작성했습니다.
private string GetNumberFromString(string sLongString, int iLimitNumbers)
{
string sReturn = "NA";
int iNumbersCounter = 0;
int iCharCounter = 0;
string sAlphaChars = string.Empty;
string sNumbers = string.Empty;
foreach (char str in sLongString)
{
if (char.IsDigit(str))
{
sNumbers += str.ToString();
iNumbersCounter++;
if (iNumbersCounter == iLimitNumbers)
{
return sReturn = sNumbers;
}
}
else
{
sAlphaChars += str.ToString();
iCharCounter++;
// reset the counter
iNumbersCounter = 0;
}
}
return sReturn;
}