提取模式中的单词

时间:2019-03-16 13:56:04

标签: python regex

我有以下字符串

[(net, asset), (amount, asset), (connect, asset), (net, asset), (check, asset), (service, asset), (adapt, asset)] | [(part, asset)] 

我只想提取开括号后面的第一个单词。我的输出应该是-

net amount connect net check service adapt part

数据

[(net, asset), (amount, asset), (connect, asset), (net, asset), (check, asset), (service, asset), (adapt, asset)] | [(part, asset)]

我尝试了以下方法。

p=re.compile("'('(.*)','")
result = p.search(data)
result.group(1)

但是这种模式匹配不起作用。任何帮助请

4 个答案:

答案 0 :(得分:1)

这里的正则表达式分析:https://regex101.com/r/kAXpNA/1

re.findall('\((.*?),', '[(net, asset), (amount, asset), (connect, asset), (net, asset), (check, asset), (service, asset), (adapt, asset)] | [(part, asset)]')
#['net', 'amount', 'connect', 'net', 'check', 'service', 'adapt', 'part']

答案 1 :(得分:0)

您当前的模式有几个问题:

p=re.compile("'('(.*)','")
  • 模式中的单引号是要在其字符串中搜索的文字单引号字符。您的数据没有任何单引号,因此不匹配。
  • 您一开始并没有逃过括号。 ()是用于创建regex groups的正则表达式中的特殊字符。要从字面上匹配括号,您需要执行\(
  • .*也可以匹配任何字符,而正则表达式最终将尝试匹配尽可能多的字符,这意味着它将跨越字符串中的多对字符。 (就像"(net, asset), (amount, asset), (connect,"这样的东西实际上满足了这种模式)如果您知道要查找的元素都是单词char,就像您在示例中一样,则可以尝试使用\w*

最后search仅查找它遇到的第一个匹配项。相反,您想使用findall来获取字符串中模式的每个实例。因此结果将是:

p=re.compile("\((\w*),")
result = p.findall(data)
result
# ['net', 'amount', 'connect', 'net', 'check', 'service', 'adapt', 'part']

答案 2 :(得分:0)

将代码更改为:

p = re.compile(r'\((\w+),')
result = p.search(data)
result.group(1)

或者,如果您想在(之后加上所有首字母,请输入:

[ m.group(1) for m in re.finditer(p, data)]

答案 3 :(得分:0)

您的模式尝试匹配示例数据中不存在的单引号,并且您必须转义右括号以使其在字面上匹配。

.*是贪婪的,它将首先匹配到字符串的末尾,然后回溯匹配最后一个逗号以实现整个模式。您可以将其变成惰性量词.+?,然后使用加号将其匹配1次以上。

如果您想匹配的不只是单词字符,而且又不想匹配逗号的左括号,则获取匹配项的另一种方法是使用否定的字符类:

\(([^,(]+)

说明

  • \(从字面上匹配(
  • (开始捕获组
    • [^,(]+否定的字符类,匹配1次以上而不是,(
  • )关闭捕获组

例如

import re
regex = r"\(([^,(]+)"
data = "[(net, asset), (amount, asset), (connect, asset), (net, asset), (check, asset), (service, asset), (adapt, asset)] | [(part, asset)]"
print(re.findall(regex, data))

# ['net', 'amount', 'connect', 'net', 'check', 'service', 'adapt', 'part']

Regex demo | Python demo