我有一个像这样的输入文本(实际的文本文件也包含围绕这两个字符串的大量垃圾字符。)
(random_garbage_char_here)**value=xxx**;(random_garbage_char_here)**value=yyy**;(random_garbage_char_here)
我正在尝试解析文本以存储以下内容:
value1="xxx"
和value2="yyy"
。
我写了如下python代码:
value1_start = content.find('value')
value1_end = content.find(';', value1_start)
value2_start = content.find('value')
value2_end = content.find(';', value2_start)
print "%s" %(content[value1_start:value1_end])
print "%s" %(content[value2_start:value2_end])
但它总会回归:
value=xxx
value=xxx
有人能告诉我如何解析文本以便输出:
value=xxx
value=yyy
答案 0 :(得分:1)
对于此输入:
menuSub.on("click",function(){
// ...
return false; // <-- here
}
使用简单的正则表达式并手动剥离第一个和最后两个字符:
content = '(random_garbage_char_here)**value=xxx**;(random_garbage_char_here)**value=yyy**;(random_garbage_char_here)'
输出:
import re
values = [x[2:-2] for x in re.findall(r'\*\*value=.*?\*\*', content)]
for value in values:
print(value)
这里的假设是value=xxx
value=yyy
中始终存在两个前导{2}和*
。
答案 1 :(得分:1)
使用正则表达式方法:
re.findall(r'\bvalue=[^;]*', s)
或 - 如果value
可以是任何1个字(字母/数字/下划线)字符:
re.findall(r'\b\w+=[^;]*', s)
请参阅regex demo
<强>详情:
\b
- 字边界value=
- 文字字符序列value=
[^;]*
- 除;
以外的零个或多个字符。请参阅Python demo:
import re
rx = re.compile(r"\bvalue=[^;]*")
s = "$%$%&^(&value=xxx;$%^$%^$&^%^*value=yyy;%$#^%"
res = rx.findall(s)
print(res)
答案 2 :(得分:1)
使用正则表达式从&#34;垃圾字符过滤所需数据&#34;:
>>> import re
>>> _input = '#4@5%value=xxx38u952035983049;3^&^*(^%$3value=yyy#%$#^&*^%;$#%$#^'
>>> matches = re.findall(r'[a-zA-Z0-9]+=[a-zA-Z0-9]+', _input)
>>> matches
['value=xxx', 'value=yyy']
>>> for match in matches:
print(match)
value=xxx
value=yyy
>>>
摘要或正则表达式:
[a-zA-Z0-9]+
:一个或多个字母数字字符=
:字面等号[a-zA-Z0-9]+
:一个或多个字母数字字符答案 3 :(得分:1)
根据re模块,您已经有了很好的答案。那肯定是最简单的方法。
如果出于任何原因(perfs?)你喜欢使用str方法,那确实是可能的。但是你必须在第一个字符串的末尾搜索第二个字符串:
ALTER TABLE mytable ADD FULLTEXT(data);
SELECT col1, col2, ... FROM mytable WHERE match(data) AGAINST("word1 word2 word3" in BOOLEAN MODE);