I want to accept only those strings having the pattern 'wild.flower', 'pink.flower',...i.e any word preceding '.flower', but the word should not contain dot. For example, "pink.blue.flower" is unacceptable. Can anyone help how to do this in python using regex?
相关问题
- how to define constructor for Python's new Nam
- streaming md5sum of contents of a large remote tar
- How to get the background from multiple images by
- Evil ctypes hack in python
- Correctly parse PDF paragraphs with Python
To match any character except a newline or a dot you could use a negated character class
[^.\r\n]+
and repeat that one or more times and use anchors to assert the start^
and the end$
of the line.^[^.\r\n]+\.flower$
Or you could specify in a character class which characters you would allow to match followed by a dot
\.
andflower
.^[a-z0-9]+\.flower$
You are looking for
"^\w+\.flower$"
.Your case of
pink.blue.flower
is unclear. There are 2 possibilities:blue
(cut off preceding dot and what was before)..flower
only if it is not preceded with a dot).In the first case accept other answers.
But if you want the second solution, use:
\b(?<!\.)[a-z]+(?=\.flower)
.Description:
\b
- Start from a word boundary (but it allows the "after a dot" case).(?<!\.)
- Negative lookbehind - exclude the "after a dot" case.[a-z]+
- Match a sequence of letters.(?=\.flower)
- Positive lookahead for.flower
.I assumed that you have only lower case letters, but if it is not the case, then add
i
(case insensitive) option.Another remark: Other answers include
\w
, which matches also digits and_
or even[^\.]
- any char other than a dot (including e.g.\n
).Are you happy with that? If you aren't, change to
[a-z]
(again, maybe withi
option).Here is the regex for you.
^([^\.]*)\.flower$
. Example: https://regex101.com/r/cSL445/1.Is this sufficient?