Python: Using regex (re_sub) to replace an a pattern with a string that includes that pattern
up vote
-1
down vote
favorite
My goal is to add a space between any word and it's question marks.
I'm trying to use python's regex, but I can't figure out a way to include the found pattern in the output string.
Example:
re.sub should replace a "Hello?" with "Hello ?"
it should not replace " ? " with anything, that doesn't match the pattern.
I was able to find out whether the question mark has a character before it using re.sub("[^ ]?",...) but that found character should be included in the second part of re.sub in order to keep it in the string and not remove it.
python regex
|
show 3 more comments
up vote
-1
down vote
favorite
My goal is to add a space between any word and it's question marks.
I'm trying to use python's regex, but I can't figure out a way to include the found pattern in the output string.
Example:
re.sub should replace a "Hello?" with "Hello ?"
it should not replace " ? " with anything, that doesn't match the pattern.
I was able to find out whether the question mark has a character before it using re.sub("[^ ]?",...) but that found character should be included in the second part of re.sub in order to keep it in the string and not remove it.
python regex
1
You must be looking forre.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary,re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"
– Tom
Nov 10 at 22:59
You must be using a lookahead in the second case,re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,?
and!
, you may usere.sub(r'(?<! )[?!]', r' g<0>', s)
andre.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37
|
show 3 more comments
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
My goal is to add a space between any word and it's question marks.
I'm trying to use python's regex, but I can't figure out a way to include the found pattern in the output string.
Example:
re.sub should replace a "Hello?" with "Hello ?"
it should not replace " ? " with anything, that doesn't match the pattern.
I was able to find out whether the question mark has a character before it using re.sub("[^ ]?",...) but that found character should be included in the second part of re.sub in order to keep it in the string and not remove it.
python regex
My goal is to add a space between any word and it's question marks.
I'm trying to use python's regex, but I can't figure out a way to include the found pattern in the output string.
Example:
re.sub should replace a "Hello?" with "Hello ?"
it should not replace " ? " with anything, that doesn't match the pattern.
I was able to find out whether the question mark has a character before it using re.sub("[^ ]?",...) but that found character should be included in the second part of re.sub in order to keep it in the string and not remove it.
python regex
python regex
asked Nov 10 at 22:42
Tom
12
12
1
You must be looking forre.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary,re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"
– Tom
Nov 10 at 22:59
You must be using a lookahead in the second case,re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,?
and!
, you may usere.sub(r'(?<! )[?!]', r' g<0>', s)
andre.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37
|
show 3 more comments
1
You must be looking forre.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary,re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"
– Tom
Nov 10 at 22:59
You must be using a lookahead in the second case,re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,?
and!
, you may usere.sub(r'(?<! )[?!]', r' g<0>', s)
andre.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37
1
1
You must be looking for
re.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary, re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
You must be looking for
re.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary, re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::
re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"– Tom
Nov 10 at 22:59
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::
re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"– Tom
Nov 10 at 22:59
You must be using a lookahead in the second case,
re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
You must be using a lookahead in the second case,
re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,
?
and !
, you may use re.sub(r'(?<! )[?!]', r' g<0>', s)
and re.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,
?
and !
, you may use re.sub(r'(?<! )[?!]', r' g<0>', s)
and re.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37
|
show 3 more comments
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244149%2fpython-using-regex-re-sub-to-replace-an-a-pattern-with-a-string-that-includes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
You must be looking for
re.sub(r'(?<! )?', ' ?', s)
. Another idea is to use a word boundary,re.sub(r'b?', r' g<0>', s)
– Wiktor Stribiżew
Nov 10 at 22:47
The first command works almost perfectly, however when I'm using the opposite of it (finding words that start with ? and seperating the two), it adds an extra space where none is required. aka it recognizes a space as a character, That's something I need to avoid... Here is the command i was using::::
re.sub(r'?(?<! )', '? ', s)
- and it changed "? word" into "?(double space)word"– Tom
Nov 10 at 22:59
You must be using a lookahead in the second case,
re.sub(r'?(?! )', '? ', s)
– Wiktor Stribiżew
Nov 10 at 23:15
I see. Thank you! One last question, if I wanted to transform this to other symbols (like ! for example), which of the question marks used in your command reference the actual question mark character and not a part of the regex itself?
– Tom
Nov 10 at 23:29
What do you mean? Could you please precise the question? If you plan to add spaces before/after more than one char, say,
?
and!
, you may usere.sub(r'(?<! )[?!]', r' g<0>', s)
andre.sub(r'[?!](?! )', r'g<0> ', s)
– Wiktor Stribiżew
Nov 10 at 23:37