首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配\d\d_\d\d\d的Regex

只匹配\d\d_\d\d\d的Regex
EN

Stack Overflow用户
提问于 2017-05-08 00:21:31
回答 2查看 411关注 0票数 0

你能帮我定义一个正则表达式吗?

  • 匹配单词r'(\d+_\d\d\d(?:_back)?)'
  • "word“的意思是,除了正确的标点符号或字符串/行的开始/结尾之外,它不应该放在前面或后面。
  • 在多行字符串中工作,在字符串中的任何位置工作,在仅由此模式组成的字符串中工作,而不使用任何其他字符串。
  • %96_175"44_5555中不匹配(因为%和第4个"5“都不是标点符号)。

例如: Pass (12_345、012_345或012_345_back是找到的组):

代码语言:javascript
复制
['12_345',
 'bla-bla 012_345',
 'bla-bla 12_345 bla-bla',
 '34\n012_345',
 '012_345\n34',
 'text—012_345—text',
 'text--12_345, text',
 'text. 012_345_back.']

失败(这里没有匹配):

代码语言:javascript
复制
[
 'text12_345',
 '12_345text',
 '12_3456',
 '%12_345',
 '!12_345',
 '.12-345',
 '12_345_front'
]

我试图区分的是表单\d+_\d\d\d(?:_back)的正确标识符,它是由用户在我的网站中的注释中插入的,与同一字符串是另一个字符串的一部分。简单的regex一直有效,直到有人插入一个指向维基百科文章的链接,文章的结尾是“%E2%84%96_175 _175”,该链接由URL编码到96_175,与我的模式相匹配。

我被困在试图匹配“适当的标点符号”或字符串或行的开头或结尾。到那时,正则表达式已经非常复杂了(我列出了我能想到的所有合理的unicode标点符号),以至于我觉得自己做错了什么。我也有困难排除额外的数字,但包括可能的结束行或字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-08 01:23:41

取决于您需要如何处理(或不处理)非字母非正确标点符号,您可以依赖Python re单词检测\b (如其中一个答案所建议的)或枚举非匹配组中的“适当”标点符号。

使用旧正则表达式(Python2.5),可以使用标点符号通配符\p

代码语言:javascript
复制
(?:\p*|^|\s)(\d+_\d\d\d)(_back)?(?:\n|\p|$|\s)

使用现代re (Python2.6及更高版本),只需将\p替换为string.punctuation,类似于https://stackoverflow.com/a/37708340/5874981

对于初学者,假设足够的“适当”只是句号,逗号和连字符尝试

代码语言:javascript
复制
(?:^|\s|\.|,|-)(\d+_\d\d\d)(_back)?(?:$|\s|\.|,|-)
票数 1
EN

Stack Overflow用户

发布于 2017-05-08 03:55:02

我不知道我是否误解了这个问题,但如果你唯一的问题是匹配一个完整的单词,忽略任何你想要的字符,我建议你试试正则词边界

所以您的正则表达式将是\b\d+_\d\d\d(?:_back)?\b

试一试,告诉我这是否是你所需要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43838096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档