문자열에서 숫자 찾기 및 추출
문자열에 포함된 번호를 찾아서 추출해야 합니다.
예를 들어, 다음 문자열에서 다음과 같이 입력합니다.
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
이거 어떻게 해?
\d+
는 정수의 정규식입니다.그렇게
//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"\d+").Value;
에서 처음 발생한 번호를 포함하는 문자열을 반환합니다.subjectString
.
Int32.Parse(resultString)
그러면 번호를 알려드리겠습니다.
번호만 취득하기 위해 전화번호를 클리어하는 방법은 다음과 같습니다.
string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
그 끈을 조사하여 사용하다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);
정규 표현을 사용하다
Regex re = new Regex(@"\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!");
}
구두점 없이 전화번호 받기 위해 사용하는 것...
var phone = "(787) 763-6511";
string.Join("", phone.ToCharArray().Where(Char.IsDigit));
// result: 7877636511
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
숫자에 소수점이 있으면 아래를 사용할 수 있습니다.
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);
}
}
}
결과:
"any 876.8 anything" ==> 876.8
"any 876 anything" ==> 876
"876435달러" ==> 876435
"876.435달러" ==> 876.435
샘플 : https://dotnetfiddle.net/IrtqVt
여기 있습니다.Linq
버전:
string s = "123iuow45ss";
var getNumbers = (from t in s
where char.IsDigit(t)
select t).ToArray();
Console.WriteLine(new string(getNumbers));
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
RegEx를 사용하여 문자열을 일치시킨 다음 변환:
Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
return int.Parse(match.Groups[1].Value);
}
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();
다음을 사용하여 이 작업을 수행할 수 있습니다.String
다음과 같은 속성:
return new String(input.Where(Char.IsDigit).ToArray());
문자열의 숫자만 표시합니다.
정규식을 2행으로 하는 문자열에서 10진수를 요구하는 경우:
decimal result = 0;
decimal.TryParse(Regex.Match(s, @"\d+").Value, out result);
플로트, 롱 등에도 같은 것이 적용됩니다.
var match=Regex.Match(@"a99b",@"\d+");
if(match.Success)
{
int val;
if(int.TryParse(match.Value,out val))
{
//val is set
}
}
여기 또 다른 간단한 솔루션이 있습니다.Linq
문자열에서 숫자 값만 추출합니다.
var numbers = string.Concat(stringInput.Where(char.IsNumber));
예:
var numbers = string.Concat("(787) 763-6511".Where(char.IsNumber));
제공 내용: "787763511"
이 질문에는 단순히 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() - 숫자에는 분수, 첨자, 위첨자, 로마 숫자, 통화 분자, 동그라미 숫자, 스크립트 고유의 숫자 등의 문자가 포함됩니다.
var outputString = String.Join("", inputString.Where(Char.IsDigit));
문자열의 모든 번호를 가져옵니다.그래서 시험 '1+2'를 사용하면 '12'가 됩니다.
문자열에 포함된 모든 양수를 가져오는 확장 메서드:
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]
Ahmad Mageed에 의해 여기서 제공되는 흥미로운 접근법은 Regex와StringBuilder
문자열에 표시되는 순서대로 정수를 추출합니다.
「 」를 한 예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);
이 원라이너로 모든 번호를 뽑아냈습니다.
var phoneNumber = "(555)123-4567";
var numsOnly = string.Join("", new Regex("[0-9]").Matches(phoneNumber)); // 5551234567
string verificationCode ="dmdsnjds5344gfgk65585";
string code = "";
Regex r1 = new Regex("\\d+");
Match m1 = r1.Match(verificationCode);
while (m1.Success)
{
code += m1.Value;
m1 = m1.NextMatch();
}
이 질문에 대한 답변 중 하나를 반대로 했습니까?정규식을 사용하여 문자열에서 숫자를 삭제하는 방법.교환하시겠습니까?
// 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);
여기 알고리즘이 있습니다.
//Fast, C Language friendly
public static int GetNumber(string Text)
{
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;
}
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 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();
를 Regex로 .\d+
\d
는 지정된 문자열의 숫자와 일치합니다.
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"));
위에서 @tim-pietzcker 답변을 사용하면 다음과 같이 처리됩니다.PowerShell
.
PS C:\> $str = '1 test'
PS C:\> [regex]::match($str,'\d+').value
1
언급URL : https://stackoverflow.com/questions/4734116/find-and-extract-a-number-from-a-string
'programing' 카테고리의 다른 글
Web.config 변환을 사용하여 appSettings 섹션에서 속성 값을 변경하는 방법 (0) | 2023.04.24 |
---|---|
Windows Azure 웹 사이트 청소 (0) | 2023.04.24 |
Excel 오류 HRESULT: 0x800A03셀 이름을 사용하여 범위를 가져오는 동안 EC가 발생했습니다. (0) | 2023.04.24 |
EPPlus를 사용한 Excel to DataTable - 편집용으로 Excel 잠김 (0) | 2023.04.24 |
방금 변수를 할당했는데 echo $variable이 다른 것을 나타냅니다. (0) | 2023.04.19 |