gpt4 book ai didi

python - 用于查找星号的正则表达式(仅当不被数字包围时)

转载 作者:行者123 更新时间:2023-12-01 00:08:21 25 4
gpt4 key购买 nike

如果满足以下任一条件,我正在寻找一个正则表达式来返回匹配项:

  • 发现星号不在 2 个数字中间。第一个数字始终是整数,但第二个数字可以是整数 (1*4)、 float (8*1.35) 或科学数 (8*2e-3)
  • 任何文本行(再次忽略科学记数法)

注意:我已经构建了一个表达式来删除双星号(“**”)后面的任何文本,但如果解决方案也可以将其合并为一个步骤,我将不胜感激。我最终将按其中的值分割该行,但卡在最初的“has_text”步骤上(用星号标记行,但当它出现在两个数字之间时忽略它):

示例输入:

input = ["1 2 3",
"4 5 6 **This is a comment to strip",
"123 *This is a line to ignore 321",
"7e-1 3*8 9"]

所需输出:

output = ["1 2 3",
"4 5 6",
"7e-1 3*8 9"]

代码:

import re
output = []
for line in input:
line_no_comments = re.sub('(\*{2}.*)', '', line)
has_text = re.search('([^0-9eE .-]+[*]{1})', line_no_comments)
if not has_text:
output.append(line_no_comments)

最佳答案

您可以使用嵌套列表理解来解决此问题 - 第一步是删除注释(包括 ** 在内的所有内容),然后删除任何具有 *< 的行 之前或之后是非数字:

output = [x for x in [re.sub(r'\s*\*\*.*$', '', y) for y in input] if not re.search(r'(^|\D)\*|\*(\D|$)', x)]
print(output)

输出(用于您的示例数据)

['4 5 6', '1 2 3 4', '7e-1 3*8 9']

关于python - 用于查找星号的正则表达式(仅当不被数字包围时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59796102/

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