python - 尝试根据大小写将一个字符串解析为两个单独的字符串

标签 python html string uppercase lowercase

我目前正在开发一个 python 机器人,它从 HTML 页面上的元 block 中检索信息。我得到了元 block 的内容,但现在我一直在尝试将其解析为两个不同的字符串。

内容示例如下:

Lowercase Words WITH UPPERCASE CONTAINING 2 AND ALSO ', AND MANY MORE CHARACTERS

到目前为止我有:

lowercase = ' '.join(w for w in content.split() if (not w.isupper()) and (not w.isdigit()))
uppercase = ' '.join(w for w in content.split() if (w.isupper() or w.isdigit()))

其中大写字符串意味着包含不是单词“Lowercase”或“Words”的所有内容

对于这类问题,我找不到太多帮助,想知道是否有人知道一个技巧或解决方法?谢谢

最佳答案

为什么不使用 regular expressions :

import re

s = "Lowercase Words WITH UPPERCASE CONTAINING 2 AND ALSO ', AND MANY MORE CHARACTERS"
match = re.match(r"(([^\s]*[a-z]+[^\s]*\s+)+)([^a-z]+)", s)
if match:
    lowercase = match.group(1)
    uppercase = match.group(3)

这将匹配以任意数量的单词开头的单行字符串,其中每个单词必须至少包含一个小写字母 (a-z)。请注意,驼峰式大小写也被识别为小写字符串(例如 "LowerCase")。然后第二部分将匹配字符串的其余部分,该字符串不得包含任何小写字母。

现在让我们尝试理解正则表达式:

  1. 我们想要匹配小写单词,所以我们写:[a-z]+
    但这只会匹配完全由小写字母组成的单词 - 我们想要如果单词包含至少一个 小写字符,则也允许其他字符并将单词作为小写匹配。 [^\s] 将匹配任何不是空格(单词边界)的字符。我们像这样组合两种模式:[^\s]*[a-z]+[^\s]*
    这匹配任意数量的非空白字符(甚至零),后跟小写字符,然后再次跟任何非空白字符序列。所以这基本上意味着,我们匹配任何不包含空格和至少一个小写字母的序列。
    现在我们创建一个这样的单词序列,由空格分隔:([^\s ]*[a-z]+[^\s]*\s+)+
  2. 匹配大写部分非常简单,因为我们只需要匹配不是小写字符的所有内容(包括空格):[^a-z]+

为了通过组匹配两种模式,我们再次将它们括在大括号中:
小写:(([^\s]*[a-z]+[^\s]*\s+)+)
大写:([^a-z]+)

也许您需要进一步调整模式以满足您的需要,但我相信这应该是一个很好的起点...

关于python - 尝试根据大小写将一个字符串解析为两个单独的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17131302/

相关文章:

python - 打印下一个 N 个质数

python - 在 python 中使用带有条件的服务器端游标读取大量数据

javascript - 使用 JavaScript 更改带有类名的 div 的 CSS

javascript - append 到字符串变量

检查字符串是否包含换行符

python - 导入 Python 库并在它们不可用时优雅地处理

python - 始终重新生成包含特定指令的 Sphinx 文档

javascript - 在 Rails 中自动提交 HTML 选择下拉列表

html - 同时使用输入框html的pattern和required属性

vb.net - 确定一维字符串数组是否仅包含零长度字符串的最简单方法是什么?