使用正则表达式进行过多的“空”匹配

时间:2018-10-03 10:22:33

标签: regex

这里是正则表达式-((?:\-\s*)?(?:\d*){1})(?=x1?(?!\d))。我对 \ d *

有问题

我需要解决查找数学方程式(例如x2,x)的任务

例如,我有文字: 9278x2-3040x + 0x1-x2 + 3x + x

(找到x系数)的结果应该是:“-3040”,“ 0”,“ 3”,“”。

“” 在这里表示x,因为x没有系数,但是它意味着有1x


但是,请使用\d*而不是\d+ (因为正则表达式不会找到x的“”),所以我还会得到多余的匹配项“”

正确的匹配应该只使用一个正则表达式并且在第一组中,这是此任务的条件,那么...该如何解决? enter image description here

1 个答案:

答案 0 :(得分:0)

如果匹配项前面紧跟数字,则需要限制该匹配项:

((?:-\s*)?(?<!\d)\d*)(?=x1?(?!\d))
          ^^^^^^^ 

请参见regex demo

详细信息

  • ((?:-\s*)?(?<!\d)\d*)-第1组(虽然看起来很多余,但是您可以删除外部括号,除非您需要执行一些特殊的操作):
    • (?:-\s*)?--和0+个空格字符的可选序列
    • (?<!\d)-当前位置的左边不允许有数字
    • \d*-0位数以上
  • (?=x1?(?!\d))-积极的前瞻性,确保后面有一个x和一个可选的1,并且后面没有数字。请注意,您可能需要使用1?+来确保一次否定超前被执行,并且只有在1匹配的情况下才被执行。