正常表达式在双倍空格之后和逗号之前匹配

时间:2015-03-21 20:43:52

标签: java regex

我正在尝试匹配下面String的粗体部分,它代表一个城市。

<17> 1795年新测试博士测试TEst Wildwood ,MI 48769-1100

Dr和Test之间有两个空格,起始部分应该在这些双空格之后发生,并在逗号之前结束。

我觉得我非常接近正确,但不能100%得到它,因为它包括测试之前的空格字符。

(?=\s{2})[\w+\s]*[^,]

以上是我到目前为止所做的,其他许多替代方案也没有用,或者它们仍然包含我一开始不想要的空白字符。

我觉得我错过了一些简单的东西,但即使看了很多地方,我也似乎无法找到符合这种模式的正则表达式。

我也知道这可以通过拆分和子串轻松完成,但不幸的是,这是一个正则表达式,因为这是一个数据库驱动的自动化应用程序,格式应该能够动态更改而不需要部署,因为代码更改。

2 个答案:

答案 0 :(得分:2)

你需要在后面看作为空格而不是前瞻,因为你希望匹配在它们之后立即开始。从那时起,您可以简单地对任何不是逗号的内容进行贪婪匹配:

(?<=\s{2})[^,]*

*是贪婪的,会消耗尽可能多的字符,在逗号之前结束匹配。

答案 1 :(得分:0)

\s实际上也匹配空格以外的空格,这可能是也可能不是你的意思。

^.*? ([^,]*).*$怎么样?这是^.*?行开头的非贪婪匹配,后跟两个文字空格,然后捕获所有不是逗号的内容,然后匹配其他内容到最后这条线。

请注意,当我复制并粘贴您的示例文本时,它不包含两个空格。这可能会导致您遇到问题,或者它只是一个转录问题而您的原始文件有两个空格。