我将如何使此Regex表达式更具包容性和准确性?

时间:2019-04-10 02:19:01

标签: python regex regex-lookarounds regex-group

我正在使用python 2.7在一段文本中查找文本。 以下文字是我摘录的一部分:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-203-974a8f0a89e8> in <module>()
     12 
     13 func = lambda a, b: np.bincount(a, weights=b)
---> 14 xr.apply_ufunc(func, xr.DataArray(ridx,dims=['idx']), f)

~/anaconda/envs/uptodate/lib/python3.6/site-packages/xarray/core/computation.py in apply_ufunc(func, *args, **kwargs)
    979                                      signature=signature,
    980                                      join=join,
--> 981                                      exclude_dims=exclude_dims)
    982     elif any(isinstance(a, Variable) for a in args):
    983         return variables_ufunc(*args)

~/anaconda/envs/uptodate/lib/python3.6/site-packages/xarray/core/computation.py in apply_dataarray_ufunc(func, *args, **kwargs)
    208 
    209     data_vars = [getattr(a, 'variable', a) for a in args]
--> 210     result_var = func(*data_vars)
    211 
    212     if signature.num_outputs > 1:

~/anaconda/envs/uptodate/lib/python3.6/site-packages/xarray/core/computation.py in apply_variable_ufunc(func, *args, **kwargs)
    558             raise ValueError('unknown setting for dask array handling in '
    559                              'apply_ufunc: {}'.format(dask))
--> 560     result_data = func(*input_data)
    561 
    562     if signature.num_outputs == 1:

<ipython-input-203-974a8f0a89e8> in <lambda>(a, b)
     11 ridx = np.digitize(np.ravel(r), ri)
     12 
---> 13 func = lambda a, b: np.bincount(a, weights=b)
     14 xr.apply_ufunc(func, xr.DataArray(ridx,dims=['idx']), f)

ValueError: object too deep for desired array

我有以下Python代码可提取所需的特定信息:

Item 1 for Product A: Flour
Solution 1 for Product A: Water
Items 2 for Product B: Milk
Solution 2 for Product B: Oil
Item 3 for Product C: Onions

Method

虽然这会提取一些信息,但我却无法提取我需要的所有信息。 我需要包含“项目”一词,但我无法提取最后一个项目,因为下一个词不是“解决方案”,而是方法。

我想要的输出将是:

extract = re.findall(r"(?<=Item|s\s).*(?=\sSolution)", page_content)

在完善正则表达式方面会提供任何帮助。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您的输入看起来像

Item 1 for Product A: FlourSolution 1 for Product A: WaterItems 2 for Product B: MilkSolution 2 for Product B: OilItem 3 for Product C: Onions

Method

以下模式为您提供所需的输出。

r'(Item[s]{0,1}.*?\:\s[A-Z][a-z]*[^A-Z])'

在此处查看: https://regex101.com/r/ucPdcV/2