我有下面的台词,
typeName="ABC:xxxxx;";
Pattern pattern4=Pattern.compile("(.*):");
matcher=pattern4.matcher(typeName);
String nameStr="";
if(matcher.find())
{
nameStr=matcher.group(1);
}
所以,如果我再加上两个括号,比如\\s*(\d*)(.*)
:那么,会有两个组吗?组(1)
将返回(\d*)
部分,而组(2)
返回(.*)
部分?
代码段是为了澄清我的困惑而给出的。不是我处理的代码。上面给出的代码可以用string.split()
以更简单的方式完成。
捕获组(pattern)
创建具有捕获属性的组。
您可能经常看到(并使用)的一个相关的方法是(?:pattern)
,它创建一个没有capturing属性的组,因此命名为non-capturing group。
当您需要重复一系列模式时,通常会使用组,例如(\.\w+)+
,或者指定交替生效的位置,例如^(0*11*0)$
(^
,然后0*1
或1*0
),与^0*11*0$
(^0*1
或1*0$
)相比较。
除了分组之外,捕获组还将记录捕获组(pattern)
中的模式匹配的文本。使用您的示例,(.*):
、.*
匹配abc
和:
匹配:
,并且由于.*
位于捕获组(.*)
中,因此为捕获组1记录文本abc
。
整个模式被定义为组号0。
模式中的任何捕获组都从1开始索引。索引由捕获组的括号开头的顺序定义。作为一个例子,下面是下面模式中的所有5个捕获组:
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
在其他regex类型(PCRE、Perl)中,它们也可以用于子例程调用。
您可以使用matcher.group(int group)
访问特定组匹配的文本。组号可以用上面所述的规则来标识。
在某些regex版本(PCRE,Perl)中,有一个分支重置特性,它允许您使用相同的数字来捕获交替的不同分支中的组。
命名捕获组仍然使用相同的编号方案编号,因此也可以通过matcher.group(int group)
访问它们。
在内部,Java的实现只是从名称映射到组号。因此,不能对2个不同的捕获组使用相同的名称。
模式的一部分可以用括号括起来 (...)。这称为“捕获组(capturing group)”。 这有两个影响: 它允许将匹配的一部分作为结果数组中的单独项。 如果我们将量词放在括号后,则它将括号视为一个整体。 示例 让我们看看在示例中的括号是如何工作的。 示例:gogogo 不带括号,模式 go+ 表示 g 字符,其后 o 重复一次或多次。例如 goooo 或 gooooooooo。 括号将字符组
问题内容: 我有以下一行, 我需要拿这个词ABC, 我写了以下代码片段, 所以,如果我说得到,ABC:但是如果我说是ABC,那么我想知道 这是什么和意味着什么呢?如果有人可以用很好的例子向我解释,那会更好。 正则表达式模式中包含一个:,为什么结果忽略了它?组1是否检测到括号内的所有单词? 因此,如果我再加上两个括号,例如:,那么会有两个小组吗?group(1)将退还零件并退还零件? 给出该代码段的
在上一节中,学习了每次如何把量词放在一个字符、字符类或者捕获组中。到目前为止,还没有详细地讨论过捕获组的概念。 捕获组(capturing group)是将多个字符作为单独的单元来对待的一种方式。构建它们可以通过把字符放在一对圆括号中而成为一组。例如,正则表达式(dog)建了单个的组,包括字符“d”“o”和“g”。匹配捕获组输入的字符串部分将会存放于内存中,稍后通过反向引用再次调用。(在 6.2
分组 使用(表达式)对表达式进行分组,例如使用(\d{3}\.){2}匹配下面例子中的数字: abc123.456.def \d{3}表示三个数字,(\d{3}\.)表示三个数字加“.”为一组,{2}表示这一组内容重复两次 捕获 在对表达式进行分组的时候,会捕获文本到自动命名的组里,使用\1 \2 …… 后向引用组 例如用([a-z]*)\ (\d*)匹配下列文本,([a-z]*)为\1组,(
捕获组是将多个字符视为一个单元的一种方法。 它们是通过将要分组的字符放在一组括号中来创建的。 例如,正则表达式(dog)创建包含字母“d”,“o”和“g”的单个组。 捕获组通过从左到右计算它们的左括号来编号。 在表达式((A)(B(C)))中,例如,有四个这样的组 - ((A)(B(C))) (A) (B(C)) (C) 要查找表达式中存在多少个组,请在匹配器对象上调用groupCount方法。
在Python中,如何在非捕获组中捕获组?换句话说,如何重复包含捕获组的非捕获子模式? 例如,捕获导入字符串上的所有包名。例如,字符串: 导入熊猫、操作系统、系统 将返回“pandas”、“os”和“sys”。下面的模式捕获第一个包并到达第二个包: 从这里,我想重复捕获组并匹配以下字符的子模式,即。当我用一个非捕获组包围这个子模式并重复它时: 它不再捕捉里面的群体。