已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
2天前关闭。
Improve this question
我有一个RegEx,它只匹配许多单词中的一个。我需要它来匹配(如果它们存在)一个或多个字符串中的单词。字符串可能看起来像这样(意大利语):
“Ciao,mi potrebbe dare l'indirizzo della sua mail?“我需要正则表达式来匹配单词'indirizzo'和'mail'。
这是我的regex:"(?i)(utente|mail|indirizzo|posta)"
我试着把'+'和'*'放在正则表达式的末尾。
如果字符串中存在一个或多个这样的单词,那么RegEx需要匹配它们吗?我的意思是,如果字符串包含'utente',那么匹配它,但是如果字符串包含' utente','mail'和'indirizzo'匹配所有三个单词,而不是像现在这样只匹配字符串中出现的第一个单词。
3条答案
按热度按时间50few1ms1#
你不能把'match more than one thing'放在正则表达式里面。
你使用这个正则表达式(你把它传递给例如
java.lang.String
的matches()
方法,或者调用Pattern.compile("someregex").matche("someHaystack")
,然后调用您得到的Matcher
对象上的方法。正是这些电话决定了你要问什么。让你的模式为(posta|indirizzo)+
仅仅意味着一个正则表达式将匹配'posta',或'indirizzo',甚至'postapostaindirizzopostaindirizzo',这与你无关。或者,您可以编写一个匹配'indirizzo della sua mail'的regexp-如,还中间的'della sua',但听起来不像是您想要的-要点是,正则表达式应用 * 一次,它自己 * 匹配单个区域-具有 * 一个 * 起点和 * 一个 * 端点。但是,你可以多次应用一个正则表达式,当然,每个应用程序仍然有一个开始/结束:这将打印:
如果你想例如用其他的东西替换每个'find'-你也可以这样做,匹配子组-你命名它。仔细阅读javadoc of
Matcher
绝对是一个值得的练习。另一种对同一输入多次运行相同regexp的“事物”是
.replaceAll
:将打印:
replaceAll
是(x.replaceAll(p, y);
)的一个可疑的简写(比如,你可能永远都不应该使用它):1.用正则表达式
p
生成Pattern
。1.通过将该模式应用于'x'来创建一个匹配器。
1.重复运行
m.find()
,直到没有更多结果。1.用
y
替换每个找到的子串。如果你想偏离这些“轨道”-通过第一个片段,制作一个
Matcher
对象。xzv2uavs2#
正则表达式模式匹配以从左到右的迭代方式工作。
所以,如果你想匹配多个单词,你有几个选择。
如果条件相对简单,那么只需编写一个模式来匹配所有条件。
但是,您希望实现的任务可能使用
String.contains
方法来完成。或者,您可以创建一个方法,该方法将字符串和所需的字符串作为参数。
用途
fnx2tebb3#
既然你在你的标签中提到了Java,我假设你需要用java来回答,你可以使用
java.util.regex
包中的Pattern
和Matcher
类,如下所示:输出如下
如果你需要它在python中,你可以参考
re
库并使用findAll函数,如下所示re.findAll(pattern, string)