首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带状()- Ch的Regex版本7自动化无聊的东西

带状()- Ch的Regex版本7自动化无聊的东西
EN

Code Review用户
提问于 2019-06-15 19:39:17
回答 2查看 2.3K关注 0票数 5

下面是一个练习- Regex ()的Regex版本 -

编写一个函数,该函数接受一个字符串,并执行与strip() string方法相同的操作。如果没有传递除要剥离的字符串以外的其他参数,则将从字符串的开头和结尾移除空格字符。否则,函数的第二个参数中指定的字符将从字符串中删除。

我写了以下代码。有什么更好的方法来写吗?任何反馈都是非常感谢的。

代码语言:javascript
复制
import re

def regex_strip(s, chars = None):

    if chars == None:
        strip_left = re.compile(r'^\s*')
        strip_right = re.compile(r'\s*下面是一个输出示例-s = '.*    alphabetatheta   *4453   +-'
print(regex_strip(s, '.+-*'))

>>>    alphabetatheta      *4453   )

        s = re.sub(strip_left, "", s)
        s = re.sub(strip_right, "", s)
    else:
        strip_left = re.compile(r'^[' + re.escape(chars) + r']*')
        strip_right = re.compile(r'[' + re.escape(chars) + r']*下面是一个输出示例-A6)
        s = re.sub(strip_left, "", s)   
        s = re.sub(strip_right, "", s)
    return s

下面是一个输出示例-

A6

EN

回答 2

Code Review用户

回答已采纳

发布于 2019-06-15 20:40:27

如果您调用regex_strip(s, ""),您将得到:

re.error:位置0处的未终止字符集

因为^[][]$都不是有效的正则表达式。您可以通过使用if not chars:而不是if chars == None:来避免这种情况。

没有必要对正则表达式进行re.compile();您不会将编译好的模式保存到任何地方以供重用。

您可以通过使用reg-ex来捕获字符串的中间、非剥离部分来简化您的逻辑,而不是为开始和结束修剪操作执行两个替换操作:

代码语言:javascript
复制
import re

def regex_strip(s, chars = None):

    if chars:
        trim = '[' + re.escape(chars) + ']*'
    else:
        trim = r'\s*'

    return re.fullmatch(f"{trim}(.*?){trim}", s).group(1)

我不确定要求您编写自己的strip()函数的目的是将任务委托给reg引擎。当问题是制造一个坚果饼干时,它看起来就像出去买一个大锤一样。

票数 9
EN

Code Review用户

发布于 2019-06-15 20:43:06

干的。两个分支机构都做相同的re.subs。把它们拿出来:

代码语言:javascript
复制
if chars is None:
    strip_left = re.compile(r'^\s*')
    strip_right = re.compile(r'\s*我建议更进一步,统一strip_*的计算:if chars is None:
    chars = string.whitespace

strip_left = re.compile(r'^[' + re.escape(chars) + r']*')
strip_right = re.compile(r'[' + re.escape(chars) + r']*将推荐与None作为chars is None进行比较,而不是使用==。)
else:
    strip_left = re.compile(r'^[' + re.escape(chars) + r']*')
    strip_right = re.compile(r'[' + re.escape(chars) + r']*我建议更进一步,统一D2的计算:A3将C4与D5作为D6进行比较,而不是使用D7。)
s = re.sub(strip_left, "", s)   
s = re.sub(strip_right, "", s)
return s我建议更进一步,统一D2的计算:A3将C4与D5作为D6进行比较,而不是使用D7。)
s = re.sub(strip_left, "", s)   
s = re.sub(strip_right, "", s)
return s

C4D5作为D6进行比较,而不是使用D7

) else: strip_left = re.compile(r'^[' + re.escape(chars) + r']*') strip_right = re.compile(r'[' + re.escape(chars) + r']*

我建议更进一步,统一D2的计算:

A3

C4D5作为D6进行比较,而不是使用D7

) s = re.sub(strip_left, "", s) s = re.sub(strip_right, "", s) return s

我建议更进一步,统一D2的计算:

A3

C4D5作为D6进行比较,而不是使用D7

票数 8
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/222372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档