Trouver et extraire un nombre à partir d'une chaîne
J'ai une exigence de trouver et d'extraire un nombre contenu dans une chaîne.
Par exemple, à partir de ces chaînes:
string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
Comment puis-je faire cela?
- Le numéro de négatif? Si oui, comment les "Bonjour - comment êtes-vous? -30" seront-ils traités?
- Salut John, Pas les nombres négatifs dans les données
- Les nombres décimaux comme
1.5
? Notation exponentielle comme1.5E45
? - Similaire (mais pas identique): stackoverflow.com/questions/1561273/...
- votre réponse est ici: stackoverflow.com/questions/844461/...
- Pourquoi pas de réponse acceptée ici?
- cochez cette gist gist.github.com/anirugu/780a1f1319bfe39f47f6efa0197985c8
Vous devez vous connecter pour publier un commentaire.
\d+
est la regex pour un nombre entier. Doncrenvoie une chaîne contenant la première occurrence d'un certain nombre de
subjectString
.Int32.Parse(resultString)
vous donnera alors le nombre.Regex.Match(subjectString, @"-?\d+").Value
au lieuVoici comment j'ai nettoyer les numéros de téléphone pour obtenir les chiffres:
string numericPhone =new String(phone.Where(Char.IsDigit).ToArray());
la chaîne et de l'utilisation
Char.IsDigit
b == "System.Linq.Enumerable.."
. Correct (et encore plus simple) seraitb = String.Join("", a.Where(char.IsDigit))
new string(char[])
constructeur.utiliser l'expression régulière ...
Ce que j'utilise pour obtenir des Numéros de Téléphone sans ponctuation...
Regex.Split peut extraire les numéros de chaînes. Vous recevez tous les nombres qui se trouvent dans une chaîne de caractères.
De sortie:
Voici un
Linq
version:"123iuow45ss".AsEnumerable().Where(char.IsDigit)
?from t .. select t
de la redondance, mais de toute façon, merci.Vous pouvez également essayer cette
Il suffit d'utiliser un RegEx pour correspondre à la chaîne, puis de les convertir:
Une solution simple à l'aide de Regex
Vous devez avoir à utiliser ce
et le code est
Voici un autre
Linq
approche qui extrait le premier numéro d'une chaîne de caractères.Exemples:
Pour ceux qui veulent décimal nombre à partir d'une chaîne avec Regex dans DEUX ligne:
Même chose applys à float, long, etc...
Vous pouvez faire cela en utilisant
String
propriété comme ci-dessous:qui ne donne que le numéro de chaîne.
La question n'est pas explicitement état que vous voulez juste les caractères de 0 à 9, mais il ne serait pas exagéré de croire que c'est vrai à partir de votre exemple et de commentaires. Voici donc le code qui le fait.
Pourquoi vous ne voulez pas utiliser de Char.Appel isdigit() - les Chiffres comprennent les personnages comme les fractions, les indices, les exposants, les chiffres Romains, de la monnaie numérateurs, les nombres encerclés, et script-chiffres spécifiques.
Obtenir tous les chiffres dans la chaîne.
Donc si vous l'utilisez pour examaple '1 + 2' il sera '12'.
Méthode d'Extension pour obtenir tous les positif des nombres contenus dans une chaîne de caractères:
Si vous voulez les nombres négatifs ainsi il suffit de modifier ce code pour gérer le signe moins (
-
)Compte tenu de cette entrée:
La résultante de la liste des numéros seront:
A l'inverse de l'une des réponses à cette question:
Comment faire pour supprimer des numéros de chaîne à l'aide de Regex.Remplacer?
voici ma solution
Une approche intéressante est fournie ici par Ahmad Mageed, utilise les Regex et stringbuilder pour extraire les entiers dans l'ordre dans lequel ils apparaissent dans la chaîne.
Un exemple d'utilisation de Regex.Répartis en fonction du poste par Ahmad Mageed est comme suit:
Vous devrez utiliser des Regex comme
\d+
\d
matchs de chiffres dans la chaîne.Voici mon Algorithme
À l'aide de @tim-pietzcker la réponse ci-dessus, la suite va travailler pour
PowerShell
.Sur la base du dernier exemple, j'ai créé une méthode: