gpt4 book ai didi

python - 带有条件边界的正则表达式?

转载 作者:行者123 更新时间:2023-12-01 07:43:58 25 4
gpt4 key购买 nike

背景

我的问题的背景:查找所有大写/小写的所有 mA 单位。尽可能多地提示用户周围被误用为“ma/Ma/MA”的字符,方便用户查找和定位。

众所周知,mA 是用于电流的有效单位。为了简单起见,我们只使用整数,因此文本中的每一行

case 1, only number and unit: 1mA
case 2, number and unit, space: 1mA current
case 3, number and unit, punctuation: 1mA,
case 4, number and unit, Unicode characters: 1mA电流I

是一个有效的表达式。

但是

case 5, 1mAcurrent

应该是一个无效的表达式,因为单位后面不允许有英文字母且不含空格

我正在尝试的正则表达式

那么在这种情况下正确的正则表达式是什么?我使用了以下文本中的每一行

case 5 is taken as a right one, this is wrong      \d{1,}mA
case 4 is ignored \d{1,}mA\b
case 4 is ignored \d{1,}mA[^a-zA-Z]*\b

正如您所读到的,没有一个是正确的。

我的复杂代码

这是我正在使用的Python代码,你会发现我使用Python的if-else

import re
text = '''
case 1, only number and unit: 1mA
case 2, number and unit, space: 2mA current
case 3, number and unit, punctuation: 3mA,
case 4, number and unit, Unicode characters: 4mA电流I
case 5, 5mAcurrent
'''
lst = text.split('\n')
lst = [i for i in lst if i]

pattern = r'(?P<QUANTITY>\d{1,}mA)(?P<TAIL>.{0,5})'

for text in lst:
for match in re.finditer(pattern, text):
if not re.match('[a-zA-Z]', match.group('TAIL')): # extra line
print(match.group('QUANTITY'), ', ', match.group('TAIL'))

输出

1mA ,  
2mA , curr
3mA , ,
4mA , 电流I

显然,错误的表达情况5,5mA电流没有像我预期的那样被考虑

寻求帮助

有没有一种简单的方法可以在一个正则表达式模式中实现它?谢谢

最佳答案

在单位后面使用负前瞻,这将检查是否没有 alpha:

pattern = r'(?P<QUANTITY>\d+mA)(?![a-z])(?P<TAIL>.{0,5})'
# here __^^^^^^^^^

代码:

pattern = r'(?P<QUANTITY>\d+mA)(?![a-z])(?P<TAIL>.{0,5})'

for text in lst:
for match in re.finditer(pattern, text):
print(match.group('QUANTITY'), match.group('TAIL'))

关于python - 带有条件边界的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com