正则表达式匹配除某些特定数字之外的许多数字组合

时间:2016-12-27 15:07:34

标签: regex

我希望匹配除特定号码以外的所有号码组合。

例如,“日期:12月27日,我吃了15块鸡肉和60块汉堡包。我总共花了11美元。”

我想要15,60而不是12 27和11,我该怎么办?

很抱歉描述不清楚。事实上,我需要的是代表某些项目数量的数字,而不是DATE,而不是ID号,而不是句子中的金钱。我很难使用正则表达式(例如(?!\\ d +))进行提取。我只是想知道是否需要使用自然语言处理来提取。任何人都可以发表任何指示或不同的想法谢谢

3 个答案:

答案 0 :(得分:1)

要仅匹配不在日期或金钱中的数字,我会使用以下模式:

(?: (\d+) )

示例:https://regex101.com/r/5qpu5a/2

答案 1 :(得分:0)

你真的需要详细说明。怎么样123,它会匹配123,3或什么都没有?这些数字的范围怎么样?这些数字有多大,多小都有限制吗?您要排除哪些号码?他们有共同点吗?

使用正则表达式时,您通常必须非常小心,并且必须了解大多数(如果不是全部)边缘情况。

在您的具体示例中,您最好只是命名要包含的数字而不是那些要排除的数字,这很简单

@Directive({
  selector: 'a, abbr, address, article, body, br, button, div, h1, h2, h3, h4, h5, h6, header, hr, i, iframe, img, ' +
  'input, label, li, link, meta, nav, object, ol, option, output, p, param, pre, section, select, small, source, span,' +
  'summary, table, tbody, td, textarea, tfoot, th, thead, time, title, tr, u, ul, video'
})
export class HighlightDirective {
    elementsArray: string[];
    listening: boolean = false;

    constructor(private el: ElementRef, private cdr: ChangeDetectorRef) {
        this.cdr = cdr;
        this.elementsArray = ["a", 'abbr', 'address', 'article', 'body', 'br', 'button', 'div', 'h1', 'h2', 'h3', 'h4', 'h5'
        , 'h6', 'header', 'hr', 'i', 'iframe', 'img', 'input', 'label', 'li', 'link', 'meta', 'nav', 'object', 'ol', 'option'
        , 'output', 'p', 'param', 'pre', 'section', 'select', 'small', 'source', 'span', 'summary', 'table', 'tbody', 'td'
        , 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'u', 'ul', 'video'];
    }

    //@Input() defaultColor: string;
    //@Input() listening: boolean = false;
    //check: boolean = false;

    public getElement(): ElementRef {
        return this.el;
    }

    public startFeedback(): boolean {
        this.listening = true;
        this.cdr.detectChanges();

        return true;
    }

    @HostListener('click') onClick() {
        if(this.listening) {

            document.getElementById('modalButton').click();

            this.listening = false;
        }
    }

    @HostListener('mouseenter') onMouseEnter() {
        if(this.listening) {

            this.el.nativeElement.style.boxShadow = '0 0 0 5px yellow';
            this.el.nativeElement.parentNode.style.boxShadow = null;
        }
    }

    @HostListener('mouseleave') onMouseLeave() {
        if(this.listening) {

            this.el.nativeElement.style.boxShadow = null;
            this.el.nativeElement.parentNode.style.boxShadow = '0 0 0 5px yellow';

            let check = false;

            for (let entry of this.elementsArray) {
                if (this.el.nativeElement.parentNode.nodeName == entry.toUpperCase()) {
                    check = true;
                    break;
                }
            }

          if (!check)
            this.el.nativeElement.parentNode.style.boxShadow = null;
        }
    }
}

会做的。

答案 2 :(得分:0)

使用环顾四周:

(?<= )\d+(?= )

这要求数字被空格字符包围。

整个匹配是您的目标(不需要群组)。

请参阅live demo