在我的程序中,我正在解析日语定义,我需要解决一些问题。我需要做三件事来解决问题。 「text」
(text)
《text》
在我「」
之间取消sentence = re.sub('「[^)]*」','', sentence)
之间的事情「」
问题是,出于某种原因,如果sentence = re.sub('([^)]*)','', sentence)
中有括号,它将不会取代任何内容。另外,我尝试使用相同的代码来处理其他两个问题,例如sentence = re.sub('《[^)]*》','', sentence)
parse = re.findall(r'「[^」]*」','', match.text)
if len(str(parse)) > 8:
sentence = re.sub(r'「[^」]*」','', match.text)
但由于某种原因它不起作用。没有错误或任何东西,它只是不替换任何东西。
我怎样才能做到这一点,或者有更好的方法来做到这一点?
修改
我对此另一部分有轻微问题。在我更换任何东西之前,我检查长度以确保它超过一定长度。
Traceback (most recent call last):
File "C:/Users/Dominic/PycharmProjects/untitled9/main.py", line 48, in <module>
parse = re.findall(r'「[^」]*」','', match.text)
File "C:\Python34\lib\re.py", line 206, in findall
return _compile(pattern, flags).findall(string)
File "C:\Python34\lib\re.py", line 275, in _compile
bypass_cache = flags & DEBUG
TypeError: unsupported operand type(s) for &: 'str' and 'int'
这似乎现在导致错误:
function GetWtiLikeCount($post_id) {
global $wpdb;
$show_symbols = get_option('wti_like_post_show_symbols');
$wti_like_count = $wpdb->get_var("SELECT SUM(value) FROM {$wpdb->prefix}wti_like_post WHERE post_id = '$post_id' AND value >= 0");
if (!$wti_like_count) {
$wti_like_count = 0;
} else {
if ($show_symbols) {
$wti_like_count = "+" . $wti_like_count;
} else {
$wti_like_count = $wti_like_count;
}
}
return $wti_like_count;
}
/**
* Get unlike count for a post
* @param $post_id integer
* @return string
*/
function GetWtiUnlikeCount($post_id) {
global $wpdb;
$show_symbols = get_option('wti_like_post_show_symbols');
$wti_unlike_count = $wpdb->get_var("SELECT SUM(value) FROM {$wpdb->prefix}wti_like_post WHERE post_id = '$post_id' AND value <= 0");
if (!$wti_unlike_count) {
$wti_unlike_count = 0;
} else {
if ($show_symbols) {
} else {
$wti_unlike_count = str_replace('-', '', $wti_unlike_count);
}
}
return $wti_unlike_count;
}
我有点理解造成这种情况的原因,但我不明白为什么它只是从那个微小的变化中起作用。我知道re.sub部分很好,这只是引起问题的前两行。
答案 0 :(得分:2)
您应该阅读有关正则表达式的教程,以便了解正则表达式的作用。
正则表达式'「[^)]*」'
匹配不是右括号的角度之间的任何内容。你需要这个:
sentence = re.sub(r'「[^」]*」','', sentence)
第二个正则表达式还有一个问题:圆括号具有特殊含义(当它们在方括号内不时),因此要匹配括号,需要写\(
和{{1 }}。所以你需要这个:
\)
最后:您应该始终为python regexp使用原始字符串。在这种情况下,它不会发生变化,但它经常会发生变化,并且这些错误令人抓狂。例如,使用:
'\([^)]*\)'
答案 1 :(得分:0)
sentence = re.sub(ur'「[^」]*」','', sentence)
^^
您需要将negatiion based quantifer
更改为」
而不是)
。
如果处理它们,您应该使用unicode
标记。如果其中有)
,那么它会因您使用「[^)]*」
^^
您已指示正则表达式在找到)
时停止。