How to fetch names using RegEx for given pattern?
I'm trying to fetch below patterns from the text using RegEx:
John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON
Input Data only contains single line and I need to find above patterns in that.
More about Pattern
- Each word will start with a Uppercase letter and followed by either Upper or Lowercase
- Minimum 2 words
- Maximum 4 words
- Words will include only A-Z or a-z chars
What I Tried:
import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)
Which will correctly identifies input like:
Sam Peters John Doe
SAM WINCH DAN BROWN
but fails on input with less than 4 words.
python regex
add a comment |
I'm trying to fetch below patterns from the text using RegEx:
John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON
Input Data only contains single line and I need to find above patterns in that.
More about Pattern
- Each word will start with a Uppercase letter and followed by either Upper or Lowercase
- Minimum 2 words
- Maximum 4 words
- Words will include only A-Z or a-z chars
What I Tried:
import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)
Which will correctly identifies input like:
Sam Peters John Doe
SAM WINCH DAN BROWN
but fails on input with less than 4 words.
python regex
2
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago
add a comment |
I'm trying to fetch below patterns from the text using RegEx:
John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON
Input Data only contains single line and I need to find above patterns in that.
More about Pattern
- Each word will start with a Uppercase letter and followed by either Upper or Lowercase
- Minimum 2 words
- Maximum 4 words
- Words will include only A-Z or a-z chars
What I Tried:
import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)
Which will correctly identifies input like:
Sam Peters John Doe
SAM WINCH DAN BROWN
but fails on input with less than 4 words.
python regex
I'm trying to fetch below patterns from the text using RegEx:
John Doe
JOHN DOE
Sam John Watson
Sam John Lilly Watson
SAM JOHN WATSON
SAM JOHN LILLY WATSON
Input Data only contains single line and I need to find above patterns in that.
More about Pattern
- Each word will start with a Uppercase letter and followed by either Upper or Lowercase
- Minimum 2 words
- Maximum 4 words
- Words will include only A-Z or a-z chars
What I Tried:
import re
re.findall("[A-Z][A-Za-z]+ [A-Z][A-Za-z]+ [A-Za-z]* [A-Za-z]*", text)
Which will correctly identifies input like:
Sam Peters John Doe
SAM WINCH DAN BROWN
but fails on input with less than 4 words.
python regex
python regex
asked 17 hours ago
Sociopath
3,43281635
3,43281635
2
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago
add a comment |
2
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago
2
2
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago
add a comment |
1 Answer
1
active
oldest
votes
Your pattern is failing because even with the *
s after the last two character sets, the spaces next to those last two character sets are not optional. So (for example) having only 2 words in the string would only match if those two words were followed by two spaces.
I'd suggest that you start with [A-Z][A-Za-z]+
for the first word, then repeat a space followed by a word up to 3 times:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
If there may be words with only one character (like "I" or "A"), then repeat the [A-Za-z]
character sets with *
instead of +
.
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
add a comment |
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',
autoActivateHeartbeat: false,
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
});
}
});
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%2f53942989%2fhow-to-fetch-names-using-regex-for-given-pattern%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your pattern is failing because even with the *
s after the last two character sets, the spaces next to those last two character sets are not optional. So (for example) having only 2 words in the string would only match if those two words were followed by two spaces.
I'd suggest that you start with [A-Z][A-Za-z]+
for the first word, then repeat a space followed by a word up to 3 times:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
If there may be words with only one character (like "I" or "A"), then repeat the [A-Za-z]
character sets with *
instead of +
.
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
add a comment |
Your pattern is failing because even with the *
s after the last two character sets, the spaces next to those last two character sets are not optional. So (for example) having only 2 words in the string would only match if those two words were followed by two spaces.
I'd suggest that you start with [A-Z][A-Za-z]+
for the first word, then repeat a space followed by a word up to 3 times:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
If there may be words with only one character (like "I" or "A"), then repeat the [A-Za-z]
character sets with *
instead of +
.
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
add a comment |
Your pattern is failing because even with the *
s after the last two character sets, the spaces next to those last two character sets are not optional. So (for example) having only 2 words in the string would only match if those two words were followed by two spaces.
I'd suggest that you start with [A-Z][A-Za-z]+
for the first word, then repeat a space followed by a word up to 3 times:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
If there may be words with only one character (like "I" or "A"), then repeat the [A-Za-z]
character sets with *
instead of +
.
Your pattern is failing because even with the *
s after the last two character sets, the spaces next to those last two character sets are not optional. So (for example) having only 2 words in the string would only match if those two words were followed by two spaces.
I'd suggest that you start with [A-Z][A-Za-z]+
for the first word, then repeat a space followed by a word up to 3 times:
^[A-Z][A-Za-z]+(?: [A-Z][A-Za-z]+){1,3}$
https://regex101.com/r/IvSvAH/1
If there may be words with only one character (like "I" or "A"), then repeat the [A-Za-z]
character sets with *
instead of +
.
edited 16 hours ago
answered 17 hours ago
CertainPerformance
75k143659
75k143659
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
add a comment |
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
works like a charm. It would be more helpful if you point out why my solution failed in this case.
– Sociopath
17 hours ago
3
3
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
@Sociopath I might also suggest a new username. But +1 to this answer.
– Tim Biegeleisen
17 hours ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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%2f53942989%2fhow-to-fetch-names-using-regex-for-given-pattern%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
2
If this is for a real system rather than a programming exercise, it is probably worth reading Falsehoods Programmers Believe About Names
– mistertribs
17 hours ago