我正试图在字符串中检测出像“哈哈哈哈”和“洛丽奥尔”这样的笑话。
目前我正在使用以下正则表达式:
^((.*?)|)(\b[ha]|\b[lo])(.*?)$
但是,这不适用于我的目的。 工作,但它也匹配与笑声完全无关的词,例如'kill',因为它只是查找包含字母l,o,h,a的任何单词。
如何在字符串中检测笑话(如“hahaha”或“lololol”)?
答案 0 :(得分:6)
尝试这种模式:
\b(?:a*(?:ha)+h?|(?:l+o+)+l+)\b
或更好,如果你的正则表达式支持原子组和占有量词:
\b(?>a*+(?:ha)++h?|(?:l+o+)++l+)\b
答案 1 :(得分:6)
为了简单起见,因为发布的解决方案对于您想要做的事情可能过于复杂:如果您认为“笑话”的唯一内容是ha
,haha
等等。 lol
,lolol
,lololol
等等,那么以下正则表达式就足够了:
\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")