我目前正在开发一个python bot,它从HTML页面上的元块中检索信息。我得到了元块的内容,现在我一直试图将它解析为两个不同的字符串。
内容的一个例子是:
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()))
其中大写字符串包含的所有内容都不是“小写”或“单词”
我无法在这类问题上找到太多帮助,并且想知道是否有人知道诀窍或解决方法?感谢
答案 0 :(得分:0)
这样的东西?
>>> from string import punctuation as punc
def ispunc(strs):
return all(x in punc for x in strs)
...
>>> strs = "Lowercase Words WITH UPPERCASE CONTAINING 2 AND ALSO ', AND MANY MORE CHARACTERS"
>>> ' '.join(w for w in strs.split() if (w.isupper() or w.isdigit() or ispunc(w)))
"WITH UPPERCASE CONTAINING 2 AND ALSO ', AND MANY MORE CHARACTERS"
>>> ' '.join(w for w in strs.split() if (not w.isupper()) and (not w.isdigit() and not ispunc(w)))
'Lowercase Words'
>>>
答案 1 :(得分:0)
为什么不使用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
)。注意,camel-case也被识别为小写字符串(例如"LowerCase"
)。然后第二部分将匹配字符串的其余部分,该字符串不得包含任何小写字母。
让我们现在试着理解正则表达式:
[a-z]+
[^\s]
将匹配任何不是空格(字边界)的字符。我们将这两种模式结合起来:[^\s]*[a-z]+[^\s]*
。([^\s]*[a-z]+[^\s]*\s+)+
[^a-z]+
为了通过组对两种模式进行匹配,我们再次用括号括起来:
小写:(([^\s]*[a-z]+[^\s]*\s+)+)
大写:([^a-z]+)
也许您需要进一步调整模式,以满足您的需求,但我相信这应该是一个很好的起点......