括号之间的正则表达式匹配在括号内的第一个空格处停止

时间:2019-05-17 15:04:02

标签: regex

我有一个像some data (920 seconds)这样的字符串,只想提取920

到目前为止,我有\([^)]*\)可以提取括号之间的所有文本。它返回(920 seconds)

(停在第一个空格之后,如何排除括号并提取任何内容?

编辑:920是一个字符串,而不是整数,这取决于数据的格式

2 个答案:

答案 0 :(得分:3)

您可以使用捕获组来获取您的子字符串:

\(([^\s)]*)[^)]*\)

RegEx Demo

答案 1 :(得分:1)

在这里,我们可以简单地使用作为左边界并收集所需的数字:

(.*?\()[0-9]+(.*)

我们可以在数字周围添加一个捕获组并将其存储在$2中:

(.*?\()([0-9]+)(.*)

enter image description here

RegEx

如果不需要此表达式,可以在regex101.com中对其进行修改或更改。

RegEx电路

jex.im可视化正则表达式:

enter image description here

JavaScript演示

const regex = /(.*?\()([0-9]+)(.*)/gm;
const str = `some data (920 seconds)
Any other data(10101 minutes)
Any other data(8918 hours)`;
const subst = `$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

Python测试

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(.*?\()([0-9]+)(.*)"

test_str = ("some data (920 seconds)\n"
    "Any other data(10101 minutes)\n"
    "Any other data(8918 hours)")

subst = "\\2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.