繁体   English   中英

合并两个正则表达式

[英]Merge two regexes

我写了以下正则表达式:

(?:.*[sS]trony [Ll]okalne(?: GW -)?)(.+)(?: nr.+)

它旨在匹配strony lokalne GW -及其变体(字符串的左侧站点)和nr (字符串的右侧站点)之间的内容。 在我的测试用例中,这个正则表达式是有效的。 我使用$1来获取我的捕获组。 请查看它捕获的内容(在 ** 和 ** 之间)。

strony lokalne GW - **Częstochowa** nr 28
[ DLO SZ ] - Strony Lokalne **Szczecin** nr 
strony lokalne GW - **Olsztyn** nr 111
[ DLO KI ] - strony lokalne GW - **Kielce** nr 270,
strony lokalne GW - **Łódź** nr 17, 
[ DLO SZ ] - Strony Lokalne **Szczecin** nr 72, 
strony lokalne GW - **Warszawa** nr 125, 
[ DLO KR ] - strony lokalne GW - **Kraków** nr 5, 
[ DLO WA ] - Strony Lokalne **Warszawa** nr 152, 
strony lokalne GW - **Zielona G?a** nr 128, 
strony lokalne GW - **Łódź** nr 63, 

我已经编写了另一个正则表达式来捕获(类似的组),因为我无法在一个 go 中这样做(即使用一个正则表达式)。 这是我的第二个正则表达式:

(?:GW -? ?)(.+)(?: nr.+)

这次匹配非常简单:我需要GW之后和nr之前的内容。 下面是一些示例:

GW **Szczecin** nr 50\n"
GW **TORUŃ** nr 96, wydanie z dnia 23/04/2004WYDARZENIA, str. 3\n"
GW **Lublin** nr 33, wydanie z dnia 08/02/2006WYDARZENIA , str. 3\n"
GW **Wrocław** nr 45, wydanie z dnia 23/02/2004WYDARZENIA, str. 3\n"

如何合并这两个正则表达式?

为了获得我在 Java 中使用的捕获组:matcher.replaceAll("$1"),其中matcher是来自正则表达式模式的 matcher object。

如果您想保持当前的方法,您可以使用

.*?\b(?:[sS]trony\s+[lL]okalne(?:\s+GW\s+-)?|GW)\s*(.*?)\s*nr.*

请参阅正则表达式演示 详情

  • .*? - 尽可能少的除换行符以外的任何零个或多个字符
  • \b - 单词边界
  • (?: - 非捕获组的开始:
    • [sS]trony\s+[lL]okalne - Strony / strony ,1+ 空格, lokalne / Lokalne
    • (?:\s+GW\s+-)?|GW) - 一个或多个空格, GW , 1+ 空格, -一个GW
  • \s* - 零个或多个空格
  • (.*?) - 第 1 组(替换模式中的$1指的是该组值):除换行符之外的零个或多个字符,尽可能少
  • \s*nr.* - 零个或多个空格、 nr和零个或多个除换行符之外的字符,尽可能多。

另一种方法是使用正则表达式进行提取,

\b(?:[sS]trony\s+[lL]okalne(?:\s+GW\s+-)?|GW)\s+(.*?)\s+nr\b

请参阅此正则表达式演示 请参阅Java 演示

import java.util.*;
import java.util.regex.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        List<String> strs = Arrays.asList(
            "strony lokalne GW - Częstochowa nr 28","[ DLO SZ ] - Strony Lokalne Szczecin nr ","strony lokalne GW - Olsztyn nr 111","[ DLO KI ] - strony lokalne GW - Kielce nr 270,","strony lokalne GW - Łódź nr 17, ","[ DLO SZ ] - Strony Lokalne Szczecin nr 72, ","strony lokalne GW - Warszawa nr 125, ","[ DLO KR ] - strony lokalne GW - Kraków nr 5, ","[ DLO WA ] - Strony Lokalne Warszawa nr 152, ","strony lokalne GW - Zielona G?a nr 128, ","strony lokalne GW - Łódź nr 63, ","","GW Szczecin nr 50","GW TORUŃ nr 96, wydanie z dnia 23/04/2004WYDARZENIA, str. 3","GW Lublin nr 33, wydanie z dnia 08/02/2006WYDARZENIA , str. 3","GW Wrocław nr 45, wydanie z dnia 23/02/2004WYDARZENIA, str. 3"
        );
        Pattern p = Pattern.compile("\\b(?:[sS]trony\\s+[lL]okalne(?:\\s+GW\\s+-)?|GW)\\s+(.*?)\\s+nr\\b");
        for (String str : strs) {
            Matcher m = p.matcher(str);
            if (m.find()) {
                System.out.println("\"" + str + "\" => " + m.group(1));
            }
        }
    }
}

Output:

"strony lokalne GW - Częstochowa nr 28" => Częstochowa
"[ DLO SZ ] - Strony Lokalne Szczecin nr " => Szczecin
"strony lokalne GW - Olsztyn nr 111" => Olsztyn
"[ DLO KI ] - strony lokalne GW - Kielce nr 270," => Kielce
"strony lokalne GW - Łódź nr 17, " => Łódź
"[ DLO SZ ] - Strony Lokalne Szczecin nr 72, " => Szczecin
"strony lokalne GW - Warszawa nr 125, " => Warszawa
"[ DLO KR ] - strony lokalne GW - Kraków nr 5, " => Kraków
"[ DLO WA ] - Strony Lokalne Warszawa nr 152, " => Warszawa
"strony lokalne GW - Zielona G?a nr 128, " => Zielona G?a
"strony lokalne GW - Łódź nr 63, " => Łódź
"GW Szczecin nr 50" => Szczecin
"GW TORUŃ nr 96, wydanie z dnia 23/04/2004WYDARZENIA, str. 3" => TORUŃ
"GW Lublin nr 33, wydanie z dnia 08/02/2006WYDARZENIA , str. 3" => Lublin
"GW Wrocław nr 45, wydanie z dnia 23/02/2004WYDARZENIA, str. 3" => Wrocław

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM