【发布时间】:2017-08-20 19:43:25
【问题描述】:
我正在尝试创建一个让我大吃一惊的正则表达式。 当我有两个连续的数字时,如何进行下面的正则表达式否定?
/^([\p{L}\p{N}\. ]+)(, ?| )([0-9-]+[a-z]?)(, ?| |$)(.*)/iu
有效示例:
Text Text 123 anything
Text Text, 123, anything
Text Text 123B anything
Text Text, 123B, anything
Text 123 anything
Text 123B anything
Text, 123, anything
Text, 123B, anything
987 123 anything
987 123B anything
987, 123, anything
987, 123B, anything
(必须)无效示例:
Text Text 456 123 anything
Text Text, 456, 123, anything
Text Text 456 123B anything
Text Text, 456, 123B, anything
Text 456 123 anything
Text 456 123B anything
Text, 456, 123, anything
Text, 456, 123B, anything
987 456 123 anything
987 456 123B anything
987, 456, 123, anything
987, 456, 123B, anything
但是正如你们所看到的,上面的所有示例都适用于我的正则表达式:https://regex101.com/r/6t5Oq5/4
要求:第一组可以有字母或数字。第二组可以有数字或数字后跟一个字母,第三组可以有任何东西。所有组可以用逗号或空格分隔。所有字母和数字都可以是任意大小。 字符串中不能有连续的数字,除非数字在第一组或最后一组(任意)。
最好的方法是什么?
【问题讨论】:
-
不知道你的要求是什么,所以,我只能建议添加一个像here 这样的前瞻。确保在
([,][ ]?)([0-9-]+[a-z]?)之后没有任何([,][ ]?)([0-9-]+[a-z]?) -
你好@WiktorStribiżew,你的例子成功了,我要做更多的测试,但显然这就是我想要的!
-
你好@WiktorStribiżew,经过几次测试,我发现这不是我想做的。我更新了我的问题以获得更准确的信息,并提供了更多示例。
-
失败条件是什么?
-
@WiktorStribiżew 这很难解释,我什至不知道这是否可能。字符串中不能有连续的数字,除非数字在第一组或最后一组(任何)。也许我需要为此创建两个正则表达式规则。
标签: regex regex-negation regex-group