用于查找具有随机中心的特定字符串的正则表达式
Regex for finding specific strings with random center
我将从大量文件中读取一个长字符串。我需要能够找到是否可以在每个字符串中找到特定类型的模式。它将在一些随机文本前后有一个特定的字符串。本质上;它可能看起来像 "ABC[?????]DEF",问号是任何字符串(最有可能不超过 50 个字符,也不短于 15 个字符)。
我不能让它正常工作。我认为正则表达式是最好的方法,但我不知道如何使用正则表达式。谁能帮帮我?
这行得通吗:
ABC[.*]DEF
或者可能
ABC.*DEF
你可以更严格一些ABC.*{15,50}DEF
顺便说一句,你可以通过这个网站来帮助自己:https://regex101.com/
尝试
String pattern = "ABC.{15,50}DEF";
我认为这可行。
我生成了一些随机测试用例,你可以试试
System.out.println("ABCes564fd5644cv81e6a7ser*oiier&%iuwdjDEF".matches(pattern));
System.out.println("ABC.{15,50.dsjfklejkfsk;dlfk;e546544}DEF".matches(pattern));
System.out.println("ABC.{15,50}*)(/;:DEF".matches(pattern)); //14 chars between
System.out.println("ABC.{15,50}*)(/;:%DEF".matches(pattern)); //15 chars between
请注意,java 正则表达式如 ABC.{15,50}DEF
如果应用于许多(!)大(!)文件,则效率低下。应用于 ABCDEABCDEABCDEABCDEABCDE...
将在每第五个位置回溯 35 次。
此问题的有效解决方案是:
- 使用搜索索引的邻近搜索(例如 Lucene)"ABC DEF"~50
- 通配符搜索(在 Flexible pattern matching in strings 中提到)
- 使用非回溯自动机的正则表达式搜索 (re2j, brics automaton or patternsearchalgorithms)
- 使用位并行自动机进行正则表达式搜索
- 常规因素搜索
遗憾的是,大多数算法都不能作为库使用。
我从 (regex take string at the center) 使用这个:
stringPart1([^.]*)stringPart2
我将从大量文件中读取一个长字符串。我需要能够找到是否可以在每个字符串中找到特定类型的模式。它将在一些随机文本前后有一个特定的字符串。本质上;它可能看起来像 "ABC[?????]DEF",问号是任何字符串(最有可能不超过 50 个字符,也不短于 15 个字符)。
我不能让它正常工作。我认为正则表达式是最好的方法,但我不知道如何使用正则表达式。谁能帮帮我?
这行得通吗:
ABC[.*]DEF
或者可能
ABC.*DEF
你可以更严格一些ABC.*{15,50}DEF
顺便说一句,你可以通过这个网站来帮助自己:https://regex101.com/
尝试
String pattern = "ABC.{15,50}DEF";
我认为这可行。
我生成了一些随机测试用例,你可以试试
System.out.println("ABCes564fd5644cv81e6a7ser*oiier&%iuwdjDEF".matches(pattern));
System.out.println("ABC.{15,50.dsjfklejkfsk;dlfk;e546544}DEF".matches(pattern));
System.out.println("ABC.{15,50}*)(/;:DEF".matches(pattern)); //14 chars between
System.out.println("ABC.{15,50}*)(/;:%DEF".matches(pattern)); //15 chars between
请注意,java 正则表达式如 ABC.{15,50}DEF
如果应用于许多(!)大(!)文件,则效率低下。应用于 ABCDEABCDEABCDEABCDEABCDE...
将在每第五个位置回溯 35 次。
此问题的有效解决方案是:
- 使用搜索索引的邻近搜索(例如 Lucene)"ABC DEF"~50
- 通配符搜索(在 Flexible pattern matching in strings 中提到)
- 使用非回溯自动机的正则表达式搜索 (re2j, brics automaton or patternsearchalgorithms)
- 使用位并行自动机进行正则表达式搜索
- 常规因素搜索
遗憾的是,大多数算法都不能作为库使用。
我从 (regex take string at the center) 使用这个:
stringPart1([^.]*)stringPart2