2017-09-01 1 views
0

J'ai un fichier texte non formaté qui ressemble à ce moment: LASTNAMEFIRSTNAMEPHONE NUMBERLASTNAMEFIRSTNAMEPHONE NUMBERLASTNAMEFIRSTNAMEPHONE NUMBERLASTNAMEFIRSTNAMEPHONE NUMBERSéparation des données dans un fichier texte en plusieurs lignes

que je voudrais formater comme :

LASTNAMEFIRSTNAMEPHONE NUMBER

LASTNAMEFIRSTNAMEPHONE NUMBER

LASTNAMEFIRSTNAMEPHONE NUMBER

avec chaque personne sur une nouvelle ligne. C'est ce que j'ai essayé (PowerShell):

$content = [IO.File]::ReadAllText(".\output.txt") 
$content -replace "(555) ***-**** ", "`n" 
$content | Out-File .\test.txt 

Mais cela ne fonctionne pas. Mon idée est que puisque le numéro de téléphone est à la fin de la ligne, remplacez le dernier espace par un retour chariot. La plupart des numéros ont le même code régional. Je voudrais un script de traitement par lots ou un script PowerShell, mais je suppose que je suis ouvert aux programmes tiers si cela fonctionne mieux. Le but ultime est de placer chaque chaîne dans une feuille de calcul organisée.

+2

1. Vous devez fournir quelques exemples de différents cas. 2. Vous ne pouvez pas vous attendre à ce que regex fonctionne si tous les ** numéros ** n'ont pas le même code régional * (sauf si vous voulez une solution qui fonctionne la plupart du temps) *. 3. '*' est un caractère générique dans regex. Votre regex ne correspond pas à ce que vous pensez et 4. Vous remplacez votre match entier par un retour chariot, perdant ainsi le numéro de téléphone dans votre résultat. –

+2

si les numéros de téléphone se terminent toujours par des chiffres, et qu'il n'y a pas de chiffres dans les noms, alors cette expression regex alternative: '-replace '(? <= \ D) \ s'," \ 'n" 'pourrait fonctionner (espace) après un chiffre. Un espace ou un onglet ou quoi que ce soit. Votre '(555)' est erroné parce que les parenthèses sont un opérateur de groupe regex, vous devez leur échapper pour faire correspondre les parenthèses dans le texte. Mais une correspondance exacte aurait besoin d'un exemple plus clair de ce que vous avez des données. – TessellatingHeckler

+0

@LievenKeersmaekers - 1. Tous les cas sont «nom de famille» «numéro de téléphone» 2. C'est comme 95% des numéros, je peux faire le reste manuellement si besoin est. 3. Je voudrais qu'il sélectionne n'importe quel nombre, car les numéros varient après l'indicatif régional. 4. Oh ... je vois. Je travaille dessus maintenant. J'ai également essayé le code dans le deuxième commentaire, et il semble fonctionner dans la fenêtre PowerShell, mais pas dans le fichier externe. Le numéro de téléphone n'a que des chiffres, les noms n'ont jamais de chiffres. – jangles

Répondre

1
(Get-Content '.\input.txt' -Raw) -replace '\(555\) \d{3}-\d{4}\s*', "`$0`r`n" | Out-File 'output.txt'