python re.compile带有变量和数字的字符串
您好,我想获得以下内容的匹配项:
test = re.compile(r' [0-12](am|pm) [1-1000] days from (yesterday|today|tomorrow)')
与此匹配:
print test.match(" 3pm 2 days from today")
它不返回任何内容,我做错了什么?我刚刚进入正则表达式并阅读文档,我认为这应该可行!感谢任何帮助 基督
------------------------------------------------- -------------------------------------------------
我正在问一个关于系统设计的新问题与 NLP 中的上述过程类似 这里
Hi I want to get a match for the following:
test = re.compile(r' [0-12](am|pm) [1-1000] days from (yesterday|today|tomorrow)')
with this match:
print test.match(" 3pm 2 days from today")
It returns none, what am i doing wrong? I am just getting into regex and reading the docs I thought this should work! ANY HELP APPRECIATED
chrism
--------------------------------------------------------------------------------------
I am asking a new question about the design of a sytem using similar process to above in NLP HERE
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
这是我戴在戒指上的帽子。仔细研究这个正则表达式可以学到一些教训:
输出:
这个正则表达式说明了一些需要学习的教训:
现代正则表达式构成了一种丰富而强大的语言。一旦您学习语法并养成习惯编写冗长、正确缩进、注释良好的代码,那么即使是像上面这样复杂的正则表达式也很容易编写、易于阅读并且易于维护。不幸的是,它们因困难、笨重和容易出错而闻名(因此不推荐用于复杂的任务)。
快乐的调整!
Here is my hat in the ring. Careful study of this regex will teach a few lessons:
Output:
This regex illustrates a few lessons to be learned:
Modern regular expressions comprise a rich and powerful language. Once you learn the syntax and develop a habit of writing verbose, properly indented, well-commented code, then even complex regexes such as the one above are easy to write, easy to read and are easy to maintain. It is unfortunate that they have acquired a reputation for being difficult, unwieldy and error-prone (and thus not recommendable for complex tasks).
Happy regexing!
小时
部分应该匹配 0, 1, ..., 9 或 10, 11, 12
但不是 13, 14, ..., 19。
您可以以类似的方式限制天数部分 1, ..., 1000,即 (1000|\d{1,3})。
what about
the hours part should match 0, 1, ..., 9 or 10, 11, 12
but not 13, 14, ..., 19.
you can limit days part in similar way for 1, ..., 1000, i.e. (1000|\d{1,3}).
试试这个:
Try this:
试试这个:
您遇到的问题是您无法在正则表达式中指定多个数字范围(据我所知),因此您必须将它们视为单个字符。
示例
Try this:
The problem that you're having is that you can't specify multiple digit numeric ranges in regex (afaik), so you have to treat them as individual characters.
Sample here
如果您想单独提取匹配的各个部分,可以使用
(?P[match])
来标记组。例如:输出:
If you want to extract the parts of the match individually, you can label the groups with
(?P<name>[match])
. For example:Output:
编辑
阅读了 Rumple Stiltskin 和 Demian Brecht 之间的讨论后,我注意到我的上述命题很差,因为它检测到字符串的某种结构,但它并不能准确地验证它是一个好的“时间模式”字符串,因为它可以例如,检测“今天起 2 天晚上 18 点”。
因此,我现在提出一种模式,它允许精确检测验证您的要求的字符串,并指出每个字符串具有与有效字符串相同的结构,但不具有有效的良好“时间模式”字符串所需的值:
结果
如果您只需要一个检测时间模式验证字符串的正则表达式,您只需使用
EDIT
Having read the discussion between Rumple Stiltskin and Demian Brecht, I noticed that my above proposition is poor because it detects a certain structure of string, but it doesn't validate precisely it is a good "time-pattern" string, because it can detect " 18pm 2 days from today" for exemple.
So I propose now a pattern that allows to detect precisely a string verifying your requirement and that points out every string having the same structure as a valid one but not with the required values of a valid good "time-pattern" string:
result
If you need only a regex that detects a time-pattern validated string, you use only
在匹配后检查整数范围更容易(并且更具可读性):
或者您可以使用现有的库,例如
pip install parsedatetime
:输出
It is easier (and more readable) to check integer ranges after the match:
Or you could use an existing library e.g.,
pip install parsedatetime
:Output