首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >识别单词/字符之间的关键信息的正则表达式

识别单词/字符之间的关键信息的正则表达式
EN

Stack Overflow用户
提问于 2021-11-11 09:58:33
回答 1查看 54关注 0票数 0

我有一个字符串如下:

代码语言:javascript
运行
复制
players: 2-8

使用regex,我将如何匹配2和8而不匹配其他一切(即“玩家:”和“-”)?

我试过:

代码语言:javascript
运行
复制
players:\s*([^.]+|\S+)

但是,这与整个短语相匹配,并使用了“.”在末尾标记字符串的结尾,这可能并不总是这样。

如果我能用“-”来匹配数字会好得多,但我也需要它从“玩家”的角度去展望未来,因为我将用它来知道数据对于给定的变量是正确的。

使用python如果这很重要

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 11:08:44

使用players:\s*([^.]+|\S+)将使用单个捕获组匹配除点以外的任何字符,或匹配非空白字符字符。结合这些,它可以匹配任何字符。

要获得仅使用的匹配,可以使用Python PyPi 正则模,您可以使用\G锚点:

代码语言:javascript
运行
复制
(?:\bplayers:\s+|\G(?!^))-?\K\d+

模式匹配:

  • (?:非捕获群
    • \bplayers:\s+阻止部分单词匹配的单词边界,然后匹配players:和1+空格字符
    • |
    • \G(?!^)锚在上一次匹配结束时断言当前位置以继续匹配

  • )闭非捕获群
  • -?\K匹配一个可选的-,忘记到目前为止匹配的内容
  • \d+匹配1+数字

Regex演示 x- Python演示

代码语言:javascript
运行
复制
import regex

s = "players: 2-8"
pattern = r"(?:\bplayers:\s+|\G(?!^))-?\K\d+"
print(regex.findall(pattern, s))

输出

代码语言:javascript
运行
复制
['2', '8']

您还可以使用一种使用re的两个捕获组的方法。

代码语言:javascript
运行
复制
import re

s = "players: 2-8"
pattern = r"\bplayers:\s+(\d+)-(\d+)\b"
print(re.findall(pattern, s))

输出

代码语言:javascript
运行
复制
[('2', '8')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69926333

复制
相关文章

相似问题

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