reob的一个菜鸟
请查看my attempt。
我想隔离除括号之外没有连字符或其他字符的数字 - 然后在这些数字周围加上引号
到目前为止,我有 - [^a-z-0-9](\d+)[^0-9-a-z]
匹配数字组 - 不以数字或字符开头或结尾
目前正在匹配(1,2)而不是说1和2
测试
(0-hyphen-number) OR
(123 no hyphen) OR
(no hyphen 2) OR
(no 3 hyphen) OR
(no -4- hyphen) OR
(no -5 hyphen) OR
(no 6- hyphen) OR
(blah 0987 hyp1hen) OR
(blah -4321 hyp-2hen) OR
(blah -1234- hyp3-hen)
预期输出:)
(0-hyphen-number) OR
("123" no hyphen) OR
(no hyphen "2") OR
(no "3" hyphen) OR
(no -4- hycphen) OR
(no -5 hyphden) OR
(no 6- hyphen) OR
(blah "0987" hyp1hen) OR
(blah -4321 hyp-2hen) OR
(blah -1234- hyp3-hen)
答案 0 :(得分:1)
你的正则表达足够接近。但是,您应该将-
放在结尾或开头或字符类中。
您应该捕获所有组并按如下方式替换它们。
正则表达式: ([^a-z0-9-])(\d+)([^0-9a-z-])
替换为:替换为$1"$2"$3
<强> Regex101 Demo 强>
答案 1 :(得分:1)
do not have hyphen or other characters around them apart from brackets
您应该注意原始正则表达式[^a-z-0-9](\d+)[^0-9-a-z]
匹配数字周围的任何标点符号。
因此,,888+
和,888]
或*888}
会匹配。
但你可能正在寻找的东西是这样的
(?:^|[\s()])(\d+)(?:[\s()]|$)
只允许空白边界或父母的边界。
将[\s()]
更改为[\s(]
或[\s}]
以满足您的需求。
修改:也可以获得空格分隔的数字 https://regex101.com/r/pO4mO1/3
(?:^|[\s()])(\d+(?:\s*\d)*)(?:[\s()]|$)
扩展
(?:
^
| [\s()]
)
( # (1 start)
\d+
(?: \s* \d )*
) # (1 end)
(?:
[\s()]
| $
)
答案 2 :(得分:0)
当我加载Regex101时,它已经有了这个正常工作的正则表达式:[^a-z-0-9](\d+)[^0-9-a-z]
FYI(对于每个人都很困惑),在该帖子的早期版本中,正则表达式为^a-z-0-9[^0-9-a-z]
。另一位用户编辑了帖子,以反映他们在演示中看到的内容。