如何检测字符串中的笑话?

时间:2013-05-09 02:46:42

标签: regex pattern-matching

我正试图在字符串中检测出像“哈哈哈哈”和“洛丽奥尔”这样的笑话。

目前我正在使用以下正则表达式:

^((.*?)|)(\b[ha]|\b[lo])(.*?)$

但是,这不适用于我的目的。 工作,但它也匹配与笑声完全无关的词,例如'kill',因为它只是查找包含字母l,o,h,a的任何单词。

如何在字符串中检测笑话(如“hahaha”或“lololol”)?

5 个答案:

答案 0 :(得分:6)

尝试这种模式:

\b(?:a*(?:ha)+h?|(?:l+o+)+l+)\b

或更好,如果你的正则表达式支持原子组和占有量词:

\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b

答案 1 :(得分:6)

为了简单起见,因为发布的解决方案对于您想要做的事情可能过于复杂:如果您认为“笑话”的唯一内容是hahaha等等。 lollolollololol等等,那么以下正则表达式就足够了:

\b(ha)+|l(ol)+\b

这假设一个正则表达式方言,其中\b表示您似乎正在使用的单词边界。

答案 2 :(得分:5)

\b(a*ha+h[ha]*|o?l+o+l+[ol]*)\b

匹配

hahahah
haha
lol
loll
loool
looooool
lolololol
lolololololo
ahaha
aaaahahahahahaha

不匹配:

looo
oool
oooo
llll
ha
l
o
lo
ol
ah
aah
aha
kill
lala
haunt
hauha
louol

答案 3 :(得分:1)

您可以尝试

regex_pattern = "\b(?:a*(?:ha)+h?|h*ha+h[ha]*|(?:l+o+)+l+|o?l+o+l+[ol]*)\b"

您可以尝试以下操作:

sentance = hhhaaahhhaaa

答案 4 :(得分:0)

在Python中,我试图通过这种方式做到这一点:

 public class home extends Fragment {
       private Button btn_dumge_login;

        public home() {
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            return inflater.inflate(R.layout.activity_home, container, false);

        }
@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

         btn_dumge_login = view.findViewById(R.id.dumgeLogin)
           btn_dumge_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getActivity(), TestActivity.class) ;
                getActivity().startActivity(intent);
            }
        });
    }

}

import re re.sub(r"\b(?:a{0,2}h{1,2}a{0,2}){2,}h?\b", "<laugh>", "hahahahha! I love laughing")