Domanda

Sto provando ad aggiungere uno spazio prima di una stringa particolare (Token Ad esempio) sostituendo un regex con un altro: somethingToken dovrebbe diventare something Token ma something Token dovrebbe rimaneresomething Token_e nonsomething Token (con 2 spazi)

Ho difficoltà a trovare un regex che corrisponderebbe a un personaggio non spaziale e poi al token ma senza includere il carattere non spazio nella partita (altrimenti verrebbe sostituito anche). Un tentativo (fallito) era di provare a negare a \b Ancora (che dovrebbe corrispondere all'inizio di una parola), ma non so se posso negare un'ancora. Qualsiasi aiuto su questo è apprezzato. Grazie.

È stato utile?

Soluzione

Ho appena trovato la risposta a questo, forse sarà utile per qualcun altro:

\BToken 

che rappresenta un limite di parole negate, quindi essenzialmente corrispondente ovunque il limite di parole standard ( b) non corrisponda. Per il mio esempio, si abbina davvero Qualcosa di tolto ma no qualcosa di segno che rimane così com'è.

Altri suggerimenti

In Java, questo può essere raggiunto come segue:

final String text = "fooToken foo Token";

// Prints 'foo Token foo Token'
System.out.println(text.replaceAll("(?<=\\S)(?=Token)", " "));

I concetti qui sono lookeshind e lookahead. Vedere Regex Tutorial - Lookahead e Lookbehind Zero Width Assertions per maggiori informazioni.

(?<!\u0020)(?=Token)

Questo cercherà un non spazio, quindi guarderà il token, ma non avrà larghezza. In questo modo puoi sostituire questa partita con uno spazio.

EDIT: se hai bisogno che funzioni in JavaScript,\u0020?(?=Token)Rendi opzionale uno spazio, quindi sostituirai lo spazio con uno spazio per nessuna modifica della rete.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top