我正在寻找一个符合这两个例子的正则表达式:
Hello I am really him.
Hello I am him.
一般来说,如何设置一个匹配字符串的正则表达式,以及缺少单词的字符串的子集?
更新:
所以这只是一个例句,看看我是否可以在我的实际字符串上重现相同的模式。然而,这并没有完全奏效,所以他们在这里。 我需要匹配句子:
Ulcerative colitis patient, biopsy taken from the descending colon, macroscopic inflammation vissible
单词descending
可能存在或不存在,单词no
可能出现在最后一个逗号之后。所以它可能是:
Ulcerative colitis patient, biopsy taken from the descending colon, macroscopic inflammation vissible
Ulcerative colitis patient, biopsy taken from the descending colon, no macroscopic inflammation vissible
Ulcerative colitis patient, biopsy taken from the colon, macroscopic inflammation vissible
Ulcerative colitis patient, biopsy taken from the colon, no macroscopic inflammation vissible
答案 0 :(得分:3)
对于此示例,您可能希望使用"?"表示可选项。此外,您还想使用"()"使多个单个字符同时可选。
这里是正则表达式(根据您的程序,确切的语法可能略有不同):
/Hello I am (really )?him/
egrep的示例语法:
echo "Hello I am him" | egrep "Hello I am (really )?him"
echo "Hello I am really him" | egrep "Hello I am (really )?him"
sed的语法示例:
echo "Hello I am him" | sed "s/Hello I am \(really \)\?him//"
答案 1 :(得分:1)
真实地说出这个词。以下空格可选:
/Hello I am (?:really )?him\./
^ ^ group
^ non-matching
^ make the whole group optional
^ escape the '.' so it only matches a literal '.'
答案 2 :(得分:1)
Hello I am (\w*\s?)him.
您可以对其进行测试here
使用实际字符串和所有测试用例更新问题后编辑:
Ulcerative colitis patient, biopsy taken from the(\s?\w*\s?)colon,(\s?\w*\s?)macroscopic inflammation vissible
可以通过以下regex101链接验证这些内容:regex101.com/r/4QRJDx/3
答案 3 :(得分:0)
现有的答案涵盖了对问题的最明显和最自然的解读。
但是出于兴趣的缘故,另一种解释可能是:如何匹配两个句子的序列,其中第二个句子与第一个句子相比最多只丢失一个单词?
在这种情况下,您正在寻找类似的内容:
(\w+\b\s*)*?(?:\w+\b\s*)(\w+\b\s*)*[.?!]+\1\2[.?!]
三个单词序列(零个或多个;一个;零个或多个);句末标点符号;然后只有第一个和最后一个单词序列。
但效率可能会提高。