从Python字符串中删除除后跟句点的数字以外的所有数字

从Python字符串中删除除后跟句点的数字以外的所有数字,python,regex,string,Python,Regex,String,假设我有一个字符串: some_string = 'lorum ipsum 123 bar foo 1. \ more text 46 here 2. some more text here \ 3. and even more text here 789' 我如何使用正则表达式(或任何其他方法)删除所有数字,除了跟有句点的数字之外 理想结果: some_string = 'lorum ipsum bar foo 1. \

假设我有一个字符串:

some_string = 'lorum ipsum 123 bar foo 1. \
               more text 46 here 2. some more text here \
               3. and even more text here 789'
我如何使用正则表达式(或任何其他方法)删除所有数字,除了跟有句点的数字之外

理想结果:

some_string = 'lorum ipsum bar foo 1. \
               more text here 2. some more text here \
               3. and even more text here'
我是一名正则表达式初学者,只尝试过
[0-9]\.
,但这突出了我想要保留的内容

我想以
1.
2.
等形式保留数字


谢谢。

我们可以尝试匹配以下模式:

\s*[0-9]+([^.]|$)
在这里,我们匹配一些可选的空格,后跟任意数量的数字,这些数字后跟除点以外的任何字符。我们捕获这个非点字符,然后在替换中使用它

some_string = 'lorum ipsum 123 bar foo 1. \
               more text 46 here 2. some more text here \
               3. and even more text here 789'
some_string = re.sub(r"\s*[0-9]+([^.]|$)", r"\1", some_string)

print(some_string)

lorum ipsum bar foo 1.                more text here 2. some more text here
            3. and even more text here


我假设您想要保留的数字从来没有十进制成分。

您也可以使用
[0-9](?!\)
作为表达式

这是向前看的一个例子,本质上是询问下一个字符是否不是“。”然后考虑它。

如果您希望有多个数字,例如41。那你也可以用

[0-9](?![0-9]+\.|\.)
我会找一个“向后看”和“向前看”的例子,并用一个剧本来测试它


祝你好运

您希望得到什么样的输出:
“1.我喜欢Python 3.7,但不喜欢Python 2.7”
?您将被问到“您尝试了什么?”您希望1到多个不带句点的数字。您可以在此处测试正则表达式,然后使用替换子字符串。发布的问题似乎根本不包括解决问题的任何尝试。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试过的内容,以便说明您在某个问题中遇到的具体问题。有关更多信息,请参阅并获取。因此,如果您有
21.42
,您只希望保留
1。
,而不是
21。
?另外,您需要什么规则来删除
123
之前或之后的多余空间,而不是两者都删除(因此,您最终使用的是
ipsumbar
而不是
ipsumbar
ipsumbar
?这是所需的空间,因此
c64
将保持
c64
,或者它应该变成
c
?谢谢@TimBiegeleisen-编辑以反映这一点。您可以将第二个正则表达式简化为
[0-9](?![0-9]*\)
,.Excellent@TimBiegeleisen完成了一半的步骤,我自己还在学习regexp。