2013-07-31 14 views
16

Ho un lungo testo e una parte del testo èRilevare la parola dopo una regex

Ciao, io sono John come (1) sono (sono/è) si?

L'ho usato per rilevare (1).

string optionPattern = "[\\(]+[0-9]+[\\)]"; 
Regex reg = new Regex(optionPattern); 

Ma io sono bloccato qui a proseguire su come rilevare dopo (1) per trovare are.

codice completo (grazie a falsetru per me questo portare lontano):

string optionPattern = @"(?<=\(\d+\))\w+"; 
Regex reg = new Regex(optionPattern); 

string[] passage = reg.Split(lstQuestion.QuestionContent); 
foreach (string s in passage) 
{ 
    TextBlock tblock = new TextBlock(); 
    tblock.FontSize = 19; 
    tblock.Text = s; 
    tblock.TextWrapping = TextWrapping.WrapWithOverflow; 
    wrapPanel1.Children.Add(tblock); 
} 

presumo se ho diviso come questo, rimuoverà tutte le parole dopo (0-9), ma quando l'eseguo rimuove solo la parola dopo lo () nell'ultimo rilevamento.

enter image description here

Come si può vedere la parola dopo (7) è andato, ma il resto non lo è.

Come rilevare lo are dopo lo (1)?
È possibile sostituire la parola dopo (1) anche con una casella di testo?

+0

+1 per una domanda di regex con sforzo. Lo prendo di più in esso, che ti impedisce di usare 'string.Split (" (1) ")'? – Sayse

+0

Sì, ho effettivamente fatto reg.Spilt (il lungo testo) ma il mio vero obiettivo è quello di ottenere la parola dopo (1), facendo fuoriuscire, sto rimuovendo tutti i (0-9) nel testo – user2376998

+0

_replace the word after (1) con una casella di testo troppo_, cosa intendi con questo? Inoltre, i tag della domanda sono un po 'confusi ... –

risposta

20

Usa lookbehind positivo lookup ((?<=\(\d+\))\w+):

string text = "Hello , i am John how (1)are (are/is) you?"; 
string optionPattern = @"(?<=\(\d+\))\w+"; 
Regex reg = new Regex(optionPattern); 
Console.WriteLine(reg.Match(text)); 

stampe are

Alternativa: catturare un gruppo (\w+)

string text = "Hello , i am John how (1)are (are/is) you?"; 
string optionPattern = @"\(\d+\)(\w+)"; 
Regex reg = new Regex(optionPattern); 
Console.WriteLine(reg.Match(text).Groups[1]); 

BTW, utilizzando @"..", non hai bisogno di fuggire \.


UPDATE

invece di utilizzare .Split(), a soli .Replace():

string text = "Hello , i am John how (1)are (are/is) you?"; 
string optionPattern = @"(?<=\(\d+\))\s*\w+"; 
Regex reg = new Regex(optionPattern); 
Console.WriteLine(reg.Replace(text, "")); 

alternative:

string text = "Hello , i am John how (1)are (are/is) you?"; 
string optionPattern = @"(\(\d+\))\s*\w+"; 
Regex reg = new Regex(optionPattern); 
Console.WriteLine(reg.Replace(text, @"$1")); 

stampe

Hello , i am John how (1) (are/is) you? 
+0

ciao grazie per la risposta, ma per favore controlla il mio aggiornato – user2376998

+0

@ user2376998, vuoi il risultato 'Ciao, io sono John come (1) (sono/è) tu? '? – falsetru

+0

sì questo è quello che intendevo, il primo passo per me è far sparire la parola e poi il secondo passo è sostituirlo con una casella di testo – user2376998

1

Sarebbe qualcosa di simile a questo lavoro?

\((?<number>[0-9]+)\)(?<word>\w+) 

Gruppi già aggiunti per facilità d'uso. :)

+0

Mai e poi mai abbinare caratteri di parole con '[a-zA-Z]' - questo fallirà in tutte le lingue straniere usando qualsiasi cosa tranne i caratteri semplici, ev it termini "presi in prestito" come "à discretion". – Lucero

+0

Punto giusto - I'll edit to use \ w ... – Shaamaan

0

Prova questa,

string text = "Hello , i am John how (1)are (are/is) you?"; 
string optionPattern = "[\\(]+[0-9]+[\\)]"; 
Regex reg = new Regex(optionPattern); 
Match t = reg.Match(text); 
int totallength = t.Index + t.Length; 
string final = text.Substring(totallength,text.length-totallength); 

nella stringa di testo finale che rimane dopo (1) memorizzerà.

0

Se si desidera sostituire il testo (sto supponendo che siete alla ricerca di un po 'di HTML), provare:

var input = "Hello , i am John how (1)are (are/is) you?"; 
var output= Regex.Replace(input, @"(?<=\(\d*\))\w*", m => { 
    return "<input type='text'/>"; 
}); 

Ed è così che l'uscita è resa: http://jsfiddle.net/dUHeJ/.

Problemi correlati