java.util.regex 匹配表达式之前的任何内容

标签 java regex

我尝试按数字类型标记以下片段:

"(0-22) 222-33-44, 222-555-666, tel./.fax (111-222-333) 22-33-44 UK, TEL/faks: 000-333-444, fax: 333-444-555, tel: 555-666-888"

"tel: 555-666-888, tel./fax (111-222-333) 22-33-44 UK"

"fax (111-222-333) 22-33-44 UK, TEL/faks: 000-333-444, fax: 333-444-555"

等等。

其概念是,这可以是“tel/faks”和其后的“tel/fax 号码”的任意组合,或者只是字符串开头的“tel/fax 号码”。

我做这个:

"(?:.(?!((tel|fax|faks)[ /:.]+)+))++"

在示例 1 中,但在 find() 之后它返回:(字符“_”是我添加的)

    _(0-22) 222-33-44, 222-555-666,_
    _电话./_
    _传真 (111-222-333) 22-33-44 英国,_
    _电话_
    _FAKS:000-333-444,_
    _传真:333-444-555_

似乎我在每个组中丢失了一个字符,并且诸如“TEL/faks”之类的组合类型被拆分。我还需要抓取(如果存在,如果不存在则默认号码是电话)以供将来处理。

如何摆脱这个问题?

ps。我使用:不区分大小写

最佳答案

你的正则表达式的意思(大致):

(?:                                 Match a group consisting of:
   .                                  any character
   (?!                                that is not followed by
      ((tel|fax|faks)[ /:.]+)+))      "tel" or "fax" or "fakx", followed by at least one
                                              punctuation character from [ /:.]
                                +   (multiple times)

这就是为什么你会在“Tel”、“Fax”等之前缺少一个字符 - 因为你的正则表达式表示永远不会匹配“Tel”、“Fax”等之前的字符。

这也是“Tel./.faks:”被分割的原因 - 因为最后一个“.”出现在“fax”之前,因此不会匹配。

我建议构造两个匹配的正则表达式:

A - a telephone number (parens, digits, commas, spaces), with at least one digit
B - a telephone/fax designation ("fax", "faks", "tel", punctuation)

然后搜索匹配的字符串

B*A+

关于java.util.regex 匹配表达式之前的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088935/

相关文章:

java - 正则表达式在java中验证用户名

java - 身份验证后如何显示用户特定数据

python - 正则表达式查找两个可选模式之间的所有内容,如果没有则返回全部

regex - 如何使用正则表达式获取 URL 的最后一段

java - SpringBoot : Failing at serialize Integer class

Java 正则表达式 - YYYYMMDD

python - 用 @s :eng only on lines starting with *CHI: 标记文本文件中的所有英文单词

java - maven 忽略 pom.xml 中的源级别

java - 在本例中,为什么优先级较低的线程没有在优先级较高的线程之后执行?

java - 如果未明确提交或回滚,则自动提交事务