如下所示:http://rubular.com/r/gPpvT4ppIN我只想匹配第一对括号内的文本,即:(X11; Linux x86_64)然而它继续匹配行后面的另一对括号。我正在使用grep。
到目前为止我尝试过的正则表达式:
\(+?.+?\)
该行:
"Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53"
目标:
(X11; Linux x86_64)
也不是
(KHTML, Gecko)
我试过使用像'。*?'这样的懒人比赛。但我不确定在哪里放。
答案 0 :(得分:1)
对于python,它的内容如下:
string = "Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53"
search = re.search(r"\((.*?)\)", string)
text = string[search.start():search.end()]
所以(。*?)匹配两者之间的所有内容,你需要把它放在两个括号之间。但是,对于括号,您需要执行“\(”和“\”)
答案 1 :(得分:1)
使用
s='Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53'
echo $s | grep -o '([^()]*)' | head -1
输出:(X1; Linux x86_64)
。请参阅online demo。
<强>详情
grep -o '([^()]*)'
- -o
选项使程序返回所有匹配项(不是发生匹配的行),并搜索以下模式:
(
- 文字(
字符(因为它是POSIX BRE模式,未转义的(
与文字圆括号相匹配)[^()]*
- 除了(
和)
)
- 文字)
字符head -1
- 仅提取第一场比赛。答案 2 :(得分:0)
对于Javascript:
const re = /\((.*?)\)/;
const userAgent = 'Mozilla/4.5 (X1; Linux x86_64) AppleWebKit/534.34 (KHTML, Gecko) Qt/4.8.1 Safari/53';
const platformA = userAgent.match(re)[0]; // (X1; Linux x86_64)
const platformB = userAgent.match(re)[1]; // X1; Linux x86_64