我需要从字符串中提取匹配的单词(方法、路、str和street),在每个单词之前和后面都要提取,直到前面的逗号、字符或数字。
样本串:
结果应尽可能接近:
基于一些堆栈答案,这是我目前拥有的:
(?<=\,)(.*Way|Road|Str|Street?)(?=\,)
任何帮助都将不胜感激。
发布于 2017-07-18 10:42:57
您可以尝试这样的方法(使用ignore_case标志)
\b(?:(?!off\b)[a-z]+[^\w,\n]+)*?\b(?:way|road|str(?:eet)?)\b(?:[^\w,\n]+[a-z]+)*
然而,这种模式在模式的文字部分(关键字)之前开始描述未定义长度的未定义子字符串,是不有效的。对于小字符串来说,这并不重要,但是不能在大字符串中使用它们。
若要排除特定的单词,可以将(?!off\b)
更改为(?!off\b|word1\b|word2\b|...)
此外,你需要更精确地确定哪些字符是允许的,哪些是不允许的。
发布于 2017-07-18 10:26:44
你可以考虑使用
^\d+\s*(*SKIP)(*F)|\b[^,]*\b(?:way|r(?:oa)?d|str(?:eet)?)\b[^,]*\b
详细信息
^\d+\s*(*SKIP)(*F)
-匹配并省略最初的1位或更多位数,然后在字符串开始处插入0+空格。|
-或者火柴.\b[^,]*\b(?:way|r(?:oa)?d|str(?:eet)?)\b[^,]*\b
--除逗号以外的任何0+字符,然后是非捕获组中的任何替代词,然后是逗号以外的0+字符,整个子模式在单词边界内匹配,以避免匹配前导/尾随标点符号/空格。https://stackoverflow.com/questions/45163164
复制相似问题