Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Python 重新细分除$和百分比以外的所有数字_Python_Regex - Fatal编程技术网

Python 重新细分除$和百分比以外的所有数字

Python 重新细分除$和百分比以外的所有数字,python,regex,Python,Regex,我正试图用Python构建一个正则表达式,以将不是美元值或带有x的百分比的子数字。下面是一个例句: s = "Hi there my name is Jon Doe, I haven't been here for 4 years, my birthday is 1/23/92, I received 10% off of my $20.50 purchase." re.sub(<pattern>, 'x', s) 谢谢 正如@abarnert所说,至少这可能是一次讨论的尝试 r

我正试图用Python构建一个正则表达式,以将不是美元值或带有x的百分比的子数字。下面是一个例句:

s = "Hi there my name is Jon Doe, I haven't been here for 4 years, my birthday is 1/23/92, I received 10% off of my $20.50 purchase."

re.sub(<pattern>, 'x', s)

谢谢

正如@abarnert所说,至少这可能是一次讨论的尝试

re.sub('(?<![$.0-9])\d*[.]*\d+(?![%.0-9])', 'x', s)

在你想清楚如何将
20.50
视为一个单独的数字来定义“数字”之前,使用这一点会很复杂(因此你跳过了所有
$20.50
,而不仅仅是
$20
部分)。首先,为“number”写一个正则表达式。那么负的向后看和向前看仍然是一个问题,因为您希望确保,例如,
10%
中的
%
意味着您跳过整个
10
,而不仅仅是贪婪地匹配
1
,然后跳过
0%
。这是一个很难解决的问题,所以你可能会被困在某个地方,但是一旦你被困了,就去问,而不是问一个你可能听不懂的正则表达式。对不起,我应该把我的尝试贴出来。
re.sub('(?<![$.0-9])\d*[.]*\d+(?![%.0-9])', 'x', s)
"Hi there my name is Jon Doe, I haven't been here for x years, my birthday is x/x/x, I received 10% off of my $20.50 purchase."