开发者

How to capture the text wthin the brackets: (), using regex maybe? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. 开发者_运维技巧 Closed 12 years ago.

any way would be fine. Perl, python, ruby...


You can match this regex

\(.*?\)

Edit:

The above regex will also include the brackets as a part of matched string. To avoid getting the brackets as a part of match (i.e. only match string inside the starting and ending bracket, excluding brackets) you may use below regex.

(?<=\().*?(?=\))


In perl, you can use this one,

Have a look

my $test = "Hello (Stack Overflow)";
   $test =~ /\(([^)]+)\)/;
my $matched_string = $1; 
print "$matched_string\n";  

OUTPUT:

Stack Overflow


Do you only want to match outer braces?

For example:

In Python:

s = "(here is some text for you (and me))"

import re
print ''.join(re.split(r"^\(|\)$", s))
# Returns "here is some text for you (and me)"

Otherwise:

s = "(here is some text for you (and me))"

import re
print [text for text in re.split(r"[()]", s) if text]
# Returns "['here is some text for you ', 'and me']"


On capturing groups

A capturing group, usually denoted with surrounding round brackets, can capture what a pattern matches. These matches can then be queried after a successful match of the overall pattern.

Here's a simple pattern that contains 2 capturing groups:

(\d+) (cats|dogs)
\___/ \_________/
  1        2

Given i have 16 cats, 20 dogs, and 13 turtles, there are 2 matches (as seen on rubular.com):

  • 16 cats is a match: group 1 captures 16, group 2 captures cats
  • 20 dogs is a match: group 1 captures 20, group 2 captures dogs

You can nest capturing groups, and there are rules specifying how they're numbered. Some flavors also allow you to explicitly name them.

References

  • regular-expressions.info/Use Round Brackets for Capturing

On repeated captures

Now consider this slight modification on the pattern:

(\d)+ (cats|dogs)
\__/  \_________/
 1         2

Now group 1 matches \d, i.e. a single digit. In most flavor, a group that matches repeatedly (thanks to the + in this case) only gets to keep the last match. Thus, in most flavors, only the last digit that was matched is captured by group 1 (as seen on rubular.com):

  • 16 cats is a match: group 1 captures 6, group 2 captures cats
  • 20 dogs is a match: group 1 captures 0, group 2 captures dogs

References

  • regular-expressions.info/Repeating a Capturing Group vs Capturing a Repeated Group

Related questions specific to .NET

  • Is there a regex flavor that allows me to count the number of repetitions matched by * and +?
  • What’s the difference between “groups” and “captures” in .NET regular expressions?
  • Differences among .NET Capture, Group, Match
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜