Python 正则表达式将4.7uF替换为4U7
我正在努力学习正则表达式。是否可以使用正则表达式将电子元件值从标准格式解析为速记格式:Python 正则表达式将4.7uF替换为4U7,python,regex,Python,Regex,我正在努力学习正则表达式。是否可以使用正则表达式将电子元件值从标准格式解析为速记格式: 4.7pF > 4P7 16.2kΩ > 16K2 22.6nH > 22N6 理想情况下,正则表达式将在十进制数之后找到字母,并将其插入小数点的位置。如果我们能切掉单元的尾随字母/符号也会很好 到目前为止,我正在匹配十进制数字,但不知道如何抓取匹配组后的字母,然后不知道如何进行替换 干杯使用以下内容进行搜索: ([0-9]*)\。([0-9]*)(。。.*()
4.7pF > 4P7
16.2kΩ > 16K2
22.6nH > 22N6
理想情况下,正则表达式将在十进制数之后找到字母,并将其插入小数点的位置。如果我们能切掉单元的尾随字母/符号也会很好
到目前为止,我正在匹配十进制数字,但不知道如何抓取匹配组后的字母,然后不知道如何进行替换
干杯使用以下内容进行搜索:
([0-9]*)\。([0-9]*)(。。.*
()
然后将其替换为
\1\3\2
。这不会改变代表单位的字母大小写。不确定如何进行搜索。使用以下方法进行搜索:
([0-9]*)\。([0-9]*)(。。.*
()
然后将其替换为
\1\3\2
。这不会改变代表单位的字母大小写。不确定如何做到这一点。这里是一个完整的Python解决方案:
import re
p = re.compile(r'\D*(\d+)\.(\d+)(\S).*')
strs = ["4.7pF", "16.2kΩ", "22.6nH"]
result = [p.sub(lambda m: "{0}{1}{2}".format(m.group(1),m.group(3).upper(),m.group(2)), x) for x in strs]
print(result) # => ['4P7', '16K2', '22N6']
电话在这里
正则表达式匹配前导非数字(0或更多),然后捕获1+个数字,匹配一个点,捕获1个或更多数字,然后捕获1个非空白字符
在代码中,在
re.sub
方法中使用lambda表达式来构造所需的替换字符串。以下是Python完整的解决方案:
import re
p = re.compile(r'\D*(\d+)\.(\d+)(\S).*')
strs = ["4.7pF", "16.2kΩ", "22.6nH"]
result = [p.sub(lambda m: "{0}{1}{2}".format(m.group(1),m.group(3).upper(),m.group(2)), x) for x in strs]
print(result) # => ['4P7', '16K2', '22N6']
电话在这里
正则表达式匹配前导非数字(0或更多),然后捕获1+个数字,匹配一个点,捕获1个或更多数字,然后捕获1个非空白字符
在代码中,在re.sub
方法中使用lambda表达式来构造所需的替换字符串。在Python中,可以使用
result = re.sub(r'(\d+)(?:\.(\d+))(\w).*', r"\1\3\2", test_str).upper()
在Python中,您可以使用
result = re.sub(r'(\d+)(?:\.(\d+))(\w).*', r"\1\3\2", test_str).upper()
正则表达式(“一般”)不支持大小写更改。使用Python实现这一点,因为电子组件值已经在分隔的字符串或更大的字符串中(以及其他内容)?正则表达式(“一般”)不支持大小写更改。使用Python实现这一点,因为电子元件值已经在单独的字符串中或在更大的字符串中(与其他东西一起)?不需要这么多复杂的东西(至少在这里)让我知道这里对您来说什么是复杂的,我不会用那种方式解释的。我只是说它也可以简单地完成。虽然这些都是相对的术语。好吧,也许对于当前的场景来说可能有点太多了。但是,这是一种通用方法(如果只有一个捕获应该更改,其他捕获不应该更改)。这就是为什么我在我的评论中提到了
(至少在这里)
。我理解您的是通用解决方案。不需要(至少在这里)这么多复杂的内容,让我知道这里对您来说有什么复杂之处,我不会用那种方式解释的。我只是说它也可以简单地完成。虽然这些都是相对的术语。好吧,也许对于当前的场景来说可能有点太多了。但是,这是一种通用方法(如果只有一个捕获应该更改,其他捕获不应该更改)。这就是为什么我在我的评论中提到了(至少在这里)
。我理解您的是通用解决方案非常快速的响应和非常简洁的,谢谢。似乎适用于小数点前后任意位数。响应速度非常快,非常简洁,谢谢。似乎适用于小数点前后任意数量的数字。