Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pythonre删除数字后的单元_Python_Regex - Fatal编程技术网

使用pythonre删除数字后的单元

使用pythonre删除数字后的单元,python,regex,Python,Regex,通过使用python正则表达式,如何删除数字后的单位字 e、 g 下面是一种方法,从units列表以编程方式构造正则表达式: import re units = ['in', 'ft'] tests = ['12in desk', '12 in desk', 'abc 20 ft long', ] expecteds = ['12 desk', '12 desk', 'abc 20 long', ] regexp = re.compile(r'(\d+)\s*(%s)\b' % '|'.jo

通过使用python正则表达式,如何删除数字后的单位字

e、 g


下面是一种方法,从
units
列表以编程方式构造正则表达式:

import re

units = ['in', 'ft']
tests = ['12in desk', '12 in desk', 'abc 20 ft long', ]
expecteds = ['12 desk', '12 desk', 'abc 20 long', ]

regexp = re.compile(r'(\d+)\s*(%s)\b' % '|'.join(units))
for test, expected in zip(tests, expecteds):
    actual = re.sub(regexp, r'\1', test)
    assert actual == expected

下面是一种方法,从
units
列表以编程方式构造正则表达式:

import re

units = ['in', 'ft']
tests = ['12in desk', '12 in desk', 'abc 20 ft long', ]
expecteds = ['12 desk', '12 desk', 'abc 20 long', ]

regexp = re.compile(r'(\d+)\s*(%s)\b' % '|'.join(units))
for test, expected in zip(tests, expecteds):
    actual = re.sub(regexp, r'\1', test)
    assert actual == expected

这是另一种方式,类似于@Rob的答案,只是有点不同。我的方法的不同之处在于,我没有使用
re.sub
方法,而是简单地捕获所有相关的组,然后将字符串放回一起,省略了包含有问题文本的第三组

import re

units = '|'.join(['in', 'ft'])

vals = ['12in desk', '12 in desk', 'abc 20 ft long']

pattern = r'([^\d]*)(\d+)\s?({})(.*)'.format(units)

regex = re.compile(pattern)
for val in vals:
    match = regex.match(val)
    out = ''.join(match.group(1,2,4))
    print("{} becomes in {}".format(val, out))

这是另一种方式,类似于@Rob的答案,只是有点不同。我的方法的不同之处在于,我没有使用
re.sub
方法,而是简单地捕获所有相关的组,然后将字符串放回一起,省略了包含有问题文本的第三组

import re

units = '|'.join(['in', 'ft'])

vals = ['12in desk', '12 in desk', 'abc 20 ft long']

pattern = r'([^\d]*)(\d+)\s?({})(.*)'.format(units)

regex = re.compile(pattern)
for val in vals:
    match = regex.match(val)
    out = ''.join(match.group(1,2,4))
    print("{} becomes in {}".format(val, out))

使用下面的代码,您可以在编号后卸下装置。这是@wesanyer的替代品

import re
units = '|'.join(['in','ft'])
pattern = "[0-9]+"+".*"+units
a = "12in desk"
match = re.search(pattern, "12in desk")
if match:
    a.replace(match.group(1), "")

使用下面的代码,您可以在编号后卸下装置。这是@wesanyer的替代品

import re
units = '|'.join(['in','ft'])
pattern = "[0-9]+"+".*"+units
a = "12in desk"
match = re.search(pattern, "12in desk")
if match:
    a.replace(match.group(1), "")

通过使用python正则表达式-请共享它。通过使用python正则表达式-请共享它。虽然此代码可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的附加上下文可以提高其长期价值。虽然此代码可能会回答此问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。