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.










share|improve this question


















  • 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 use re.sub(r'(?<! )[?!]', r' g<0>', s) and re.sub(r'[?!](?! )', r'g<0> ', s)
    – Wiktor Stribiżew
    Nov 10 at 23:37















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.










share|improve this question


















  • 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 use re.sub(r'(?<! )[?!]', r' g<0>', s) and re.sub(r'[?!](?! )', r'g<0> ', s)
    – Wiktor Stribiżew
    Nov 10 at 23:37













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.










share|improve this question













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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 22:42









Tom

12




12








  • 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 use re.sub(r'(?<! )[?!]', r' g<0>', s) and re.sub(r'[?!](?! )', r'g<0> ', s)
    – Wiktor Stribiżew
    Nov 10 at 23:37














  • 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 use re.sub(r'(?<! )[?!]', r' g<0>', s) and re.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

















active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















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






























active

oldest

votes













active

oldest

votes









active

oldest

votes






active

oldest

votes
















 

draft saved


draft discarded



















































 


draft saved


draft discarded














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





















































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







Popular posts from this blog

Full-time equivalent

さくらももこ

13 indicted, 8 arrested in Calif. drug cartel investigation