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,我有下面的字符串 WA2ąą-02 -7+12,7. PP-.5P x0.6 words 我需要用正则表达式计算所有数字的字,数和和 文字: WA2ąą-02 -7+12,7. PP-.5P x0.6 words 编号: 2 -2 -7 12 7 -0.5 0.6 数字总和应为12.1 我编写了这段代码,只有字数计算工作正常: import re string = "WA2ąą-02 -7+12.7. PP-.5P x0.6 word" #regular expresions

我有下面的字符串

WA2ąą-02 -7+12,7. PP-.5P x0.6 words
我需要用正则表达式计算所有数字的

文字:

WA2ąą-02
-7+12,7. 
PP-.5P
x0.6
words
编号:

2
-2
-7
12
7
-0.5
0.6
数字总和应为
12.1

我编写了这段代码,只有字数计算工作正常:

import re

string = "WA2ąą-02 -7+12.7. PP-.5P x0.6    word"

#regular expresions
regex1 = r'\S+'
regex2 = r'-?\b\d+(?:[,\.]\d*)?\b'

count_words = len(re.findall(regex1, string))
count_numbers = len(re.findall(regex2, string))
sum_numbers = sum([float(i) for i in re.findall(regex2, string)])

print("\n")
print("String:", string)
print("\n")
print("Count words:", count_words)
print("Count numbers:", count_numbers)
print("Sum numbers:", sum_numbers)
print("\n")
input("Press enter to exit")
输出:

Count words: 5
Count numbers: 4
Sum numbers: 9.7

我认为你的
regex1
很好用,很简单

regex2 = r'[-+]?\d*\.?\d+'
似乎做到了这一点(但使用正则表达式很容易忽略边缘情况)。可选的
-
或“+”,后跟任意数字,后跟可选的
,然后至少匹配一个数字


下面的正则表达式似乎工作正常

([-+]?[\.]?(?=\d)(?:\d*)(?:\.\d+)?)
Python代码

更新
HEX


以下正则表达式似乎有效(假设字符串中没有十进制数)

Python代码


如果有任何问题,请随意评论

您希望12,7是12和7,而不是12.7,对吗?在一些国家,可以表示十进制。另外,代码中的字符串和问题中的字符串是不同的(一个有12.7,另一个有12,7)。我犯了一个错误,正确的字符串应该是“WA2ąą-02-7+12,7.PP-.5px0.6 words”,但我找到了解决方案,我用这个正则表达式表示数字:r“[-+]?\d*\.\d+”好的。添加它作为一个答案!这适用于2…4 r“[-+]?\d*\。\d+-+]?\d+”还有一件事,我如何找到以x或0x开头的十六进制数,并将它们复制到十进制。求和是正确的,只需打印出生成它的列表,其中两个数是负数<代码>[-2.0,-7.0,12.7,6.0]。只有
-.5
无法识别,因为缺少前导零,这在大多数情况下是一个很好的决定,因为计算机输出很少能实现该快捷方式。@n1c9是的..我想要它..)
p = re.compile(r'([-+]?[\.]?(?=\d)(?:\d*)(?:\.\d+)?)')
test_str = u"WA2ąą-02 -7+12,7. PP-.5P x0.6 words"
print(sum([float(x) for x in re.findall(p, test_str)]))
([-+]?)(?:0?x)([0-9A-Fa-f]+)
p = re.compile(r'([-+]?)(?:0?x)([0-9A-Fa-f]+)')
test_str = u"WA2ąą-02 -7+12,7. -0x1AEfPq PP-.5P 0x1AEf +0x1AEf x0.6 words"

for x in re.findall(p, test_str):
    tmp = x[0] + x[1]
    print(int(tmp, 16))