【问题标题】:Regex that matches all characters until 2 white spaces匹配所有字符的正则表达式,直到 2 个空格
【发布时间】:2013-06-25 00:04:44
【问题描述】:

我正在使用 node.js 来挑选一些转换后的文本中的字段值。随机空间非常混乱。一行如下所示:

'ADDRESS: 2626 W MAIN ST                                       Tran Total $1.91.$3'

我知道字段从哪里开始,但是在两个空格之后我无法让它停止。这是我正在尝试的,但它会将所有内容返回到“地址:”的右侧:

/ADDRESS:\s([[^\s{2,}]+)/

有没有办法包含空格并在第一个双空格处停止并向前看?这不起作用:

/ADDRESS:\s(.*(q!\s{2,}))/

【问题讨论】:

  • 如果没有两个空格,而是地址以字符串结尾或换行符结尾怎么办?

标签: javascript regex


【解决方案1】:

使用非贪心通配符:

/ADDRESS:\s.*?(?=\s{2})/

REGEXR

【讨论】:

    【解决方案2】:

    为什么不这样做呢?

    out = input.split("  ")[0]; // two spaces in that string
    

    这比正则表达式更有效。或者试试这个:

    var spaces = input.indexOf("  "); // again, two spaces
    out = spaces < 0 ? input : input.substr(0,spaces);
    

    【讨论】:

    • input.substring(input.indexOf(' ') + 1, input.indexOf(' ')) 表示该组。 (第二个是两个空格。愚蠢的 cmets。)
    • 这是一个不错的选择,但有时我们别无选择。例如,在我的情况下,我正在处理现有项目,我们有方法从基于正则表达式的 pdf 中读取值。我不能只为一个值更改现有逻辑。
    【解决方案3】:
    /ADDRESS:\s((?:\S|\s(?!\s))*)/
    

    应该可以解决问题。任意数量的非空格或不跟空格的空格。

    【讨论】:

    • 我认为它需要两个空格,这样地址中单词之间的空格才不会停止。
    • @Barmar:空格后面没有空格。
    • 是的,这让我足够接近。我意识到我有一些带有 \n 的行和一些带有多个空格的行,因为它正在使用 OCR 进行转换。谢谢。
    猜你喜欢
    • 2012-05-09
    • 2015-07-18
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2017-09-02
    • 2017-06-28
    相关资源
    最近更新 更多