我正在尝试匹配下面String的粗体部分,它代表一个城市。
<17> 1795年新测试博士测试TEst Wildwood ,MI 48769-1100Dr和Test之间有两个空格,起始部分应该在这些双空格之后发生,并在逗号之前结束。
我觉得我非常接近正确,但不能100%得到它,因为它包括测试之前的空格字符。
(?=\s{2})[\w+\s]*[^,]
以上是我到目前为止所做的,其他许多替代方案也没有用,或者它们仍然包含我一开始不想要的空白字符。
我觉得我错过了一些简单的东西,但即使看了很多地方,我也似乎无法找到符合这种模式的正则表达式。
我也知道这可以通过拆分和子串轻松完成,但不幸的是,这是一个正则表达式,因为这是一个数据库驱动的自动化应用程序,格式应该能够动态更改而不需要部署,因为代码更改。
答案 0 :(得分:2)
你需要在后面看作为空格而不是前瞻,因为你希望匹配在它们之后立即开始。从那时起,您可以简单地对任何不是逗号的内容进行贪婪匹配:
(?<=\s{2})[^,]*
*
是贪婪的,会消耗尽可能多的字符,在逗号之前结束匹配。
答案 1 :(得分:0)
\s
实际上也匹配空格以外的空格,这可能是也可能不是你的意思。
^.*? ([^,]*).*$
怎么样?这是^.*?
行开头的非贪婪匹配,后跟两个文字空格,然后捕获所有不是逗号的内容,然后匹配其他内容到最后这条线。
请注意,当我复制并粘贴您的示例文本时,它不包含两个空格。这可能会导致您遇到问题,或者它只是一个转录问题而您的原始文件有两个空格。