【问题标题】:Splitting with Regular Expression in Python [duplicate]在 Python 中使用正则表达式拆分 [重复]
【发布时间】:2018-01-31 06:46:09
【问题描述】:

我对 Python 比较陌生,我正在尝试使用 re 拆分字符串。 我进行了一些研究,并且遇到了一些示例并进行了尝试。它们似乎有效,但有局限性。

我正在使用带有与整数值关联的字符串键的字典。我正在尝试对每个单词应用一个权重,该权重取决于与键字符串关联的整数值。我的问题是该字符串的格式不完美,我需要将其拆分为下划线 ( _ ) 以及空格和其他各种分隔符。据我了解,这需要使用正则表达式来完成。我的代码如下:

for key, value in sorted_articles.items():
    wordList = print(re.split(r'(_|\s|:|)',key))

当我打印出来时,它会很好地拆分所有内容,但它也会打印出分隔符,而不是在列表中忽略它们。例如,字符串"Hello_how are you_"['Hello', '_', 'how', ' ', 'are', ' ', 'you','_'] 的形式存储在列表中。 我不确定为什么将分隔符添加到列表中,我不知道如何修复它。提前感谢您的帮助!

【问题讨论】:

  • 使用r'[_\s:]'r'(?:_|\s|:)'。将捕获组添加到模式中后,这些值将成为结果列表的一部分。
  • 第一个效果很好,谢谢!不过,您能解释后一种解决方案吗?只是好奇
  • 两者是等价的。他们只是在_、空格和:上分开。
  • 括号做类匹配。它与括号内的任何字符匹配。没有括号对 g 进行分组,以 ?: 开头使其成为非捕获组,并且管道 |是组内的 or 运算符。所以 [abc] 匹配 a 或 b 或。 (ab|c) 匹配 ab 或 c。

标签: python python-3.x


【解决方案1】:

您可以使用\W+ 字符进行拆分,这将完全不拆分字母字符串项目,并使用|_ 专门搜索下划线:

for key, value in sorted_articles.items():
    wordList = print(re.split('\W+|_',key))

例如:

s = "Hello_how are you_"

print(re.split("\W+|_", s))

输出:

['Hello', 'how', 'are', 'you', '']

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多