How to capture the text wthin the brackets: (), using regex maybe? [closed]
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 captures16
, group 2 capturescats
20 dogs
is a match: group 1 captures20
, group 2 capturesdogs
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 captures6
, group 2 capturescats
20 dogs
is a match: group 1 captures0
, group 2 capturesdogs
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
精彩评论