Regex corrisponde a tutto dopo il punto interrogativo?


125

Ho un feed in Yahoo Pipes e desidero abbinare tutto dopo un punto interrogativo.

Finora ho capito come abbinare il punto interrogativo usando ..

\?

Ora solo per abbinare tutto ciò che è dopo / segue il punto interrogativo.


2
\?.*corrisponde a tutto (inclusa una stringa vuota) dopo ?.
khachik

Che linguaggio di programmazione stai usando?
Mark Byers

1
Per coloro che utilizzano Java, è"\\?"
CodyBugstein

Risposte:


251
\?(.*)

Vuoi il contenuto del primo gruppo di acquisizione.


15
@ Contrassegna se questo è ciò di cui hai bisogno (anche se questa domanda è vecchia!), Per favore contrassegnalo come risposta.
Pieter VDE

5
@Dreamonic Non credo che stia succedendo :(
Starkers

4
@Starkers Hai ragione. Non succederà. Da allora Mark non è più stato Feb 5 '11 at 10:41. È comunque utile sottolineare ogni cambiamento che otteniamo. Forse qualcuno imparerà da Dreamonic sottolineando questo.
DutGRIFF

1
come cattureresti il ​​contenuto dopo l'ultimo punto interrogativo? voglio 'ancorare' da allora in poi - non sono sicuro che ancora sia la parola giusta.
BKSpurgeon

2
@BKSpurgeon primo gruppo di cattura in ^. * \? ([^?] *) $ Dovrebbe funzionare
thejh

61

Prova questo:

\?(.*)

Le parentesi sono un gruppo di cattura che puoi usare per estrarre la parte della stringa che ti interessa.

Se la stringa può contenere nuove righe, potrebbe essere necessario utilizzare il modificatore "punto tutto" per consentire al punto di corrispondere al carattere della nuova riga. Se devi o meno farlo e come farlo, dipende dalla lingua che stai usando. Sembra che tu abbia dimenticato di menzionare il linguaggio di programmazione che stai usando nella tua domanda.

Un'altra alternativa che puoi utilizzare se la tua lingua supporta le asserzioni lookbehind a larghezza fissa è:

(?<=\?).*

Oh la larghezza fissa? Posso dare un'occhiata dietro per qualcosa di simile? Argomenti: codice, programmazione, design Quindi voglio selezionare i due punti e guardare indietro fino alla T cpaital degli argomenti e in avanti fino alla fine della riga? (in questo caso la fine della linea è "design".
Marco

@Mark: che lingua stai usando?
Mark Byers

Sto usando Yahoo Pipes che ad eccezione di regex. Ho ricevuto una risposta a questa domanda e ora sto cercando un'espressione regolare che selezioni 6 caratteri dietro i due punti e altrettanti (tutti) in avanti ..
Mark

@ Mark: ho controllato la tua lista di domande ma non vedo la tua nuova. Sei sicuro di averlo pubblicato?
Mark Byers

Ripeterò questa nuova domanda tra pochi istanti. Immagino sia meglio tenere separate le mie domande e davvero avrei dovuto chiederle entrambe allo stesso tempo. Grazie
Mark

36

Con la tecnica del lookbehind positivo :

(?<=\?).*

(Stiamo cercando un testo preceduto da un punto interrogativo qui)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Esempio

Fondamentalmente ?<=è un costrutto di gruppo, che richiede il punto interrogativo di escape, prima di poter effettuare qualsiasi corrispondenza.

Funzionano davvero bene, ma non tutte le implementazioni li supportano.


13
\?(.*)$

Se vuoi far corrispondere tutti i caratteri dopo "?" puoi usare un gruppo per abbinare qualsiasi carattere, e faresti meglio a usare il segno "$" per indicare la fine della riga.


1
Nella maggior parte delle implementazioni di espressioni regolari, l' .impostazione predefinita non corrisponde al nuovo carattere di riga. Di conseguenza, anche senza il carattere di fine riga nell'espressione, corrisponderebbe fino alla fine della riga.
Mark Byers

2

Dai un'occhiata a questo sito: http://rubular.com/ Fondamentalmente il sito ti consente di inserire del testo di esempio (quello che cercheresti sul tuo sito) e poi mentre costruisci l'espressione regolare evidenzierà ciò che viene abbinato tempo reale.


Grazie per questo, sai come abbinare i due punti? E una certa quantità di caratteri prima dei due punti?
Mark

/([a-zA-Z]{4}):/abbinerà Test: Welcomee prenderàTest
Austin Lin

0

str.replace(/^.+?\"|^.|\".+/, '');

Questo a volte è male da usare quando vuoi selezionare cos'altro rimuovere tra "" e non puoi usarlo più di due volte in una stringa. Tutto ciò che fa è selezionare tutto ciò che non è tra "" e sostituirlo con niente.

Anche per me è un po 'confuso, ma cercherò di spiegarlo. ^.+?(niente FACOLTATIVO) fino al primo "poi |Or / stop (ancora alla ricerca di cosa significhi realmente) fino a che / at non ^.ha selezionato nulla fino a prima del 2 ° "utilizzando ( |stop / at). E seleziona tutto ciò che viene dopo con. +.


Considerare l'aggiunta di una descrizione del codice in modo da sapere cosa fa e perché.
Pika il mago delle balene
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.