Есть несколько хороших примеров для этого в R Wiki . Я украду пару здесь:
Метод слияния
Поскольку ваши ключи называются одинаковыми, короткий способ сделать внутреннее соединение - merge ():
merge(df1,df2)
полное внутреннее соединение (все записи из обеих таблиц) может быть создано с помощью ключевого слова «все»:
merge(df1,df2, all=TRUE)
левое внешнее соединение df1 и df2:
merge(df1,df2, all.x=TRUE)
правое внешнее объединение df1 и df2:
merge(df1,df2, all.y=TRUE)
вы можете перевернуть их, пощекотать их и протрите их, чтобы получить другие два внешних соединения, о которых вы спрашивали:)
Метод подстроки
Левое внешнее соединение с df1 слева с использованием метода подстроки будет:
df1[,"State"]<-df2[df1[ ,"Product"], "State"]
Можно создать и другую комбинацию внешних соединений путем макетирования примера нижнего нижнего соединения. (да, я знаю, что это эквивалент слова «Я оставлю это как упражнение для читателя ...»)
Вы не даете достаточно подробностей. Поскольку ваше первое выражение работает, я предполагаю, что вы используете режим Singleline
.
Следующее мое предположение состоит в том, что эта строка является частью большей строки.
^
соответствует начало строки по умолчанию
$
по умолчанию соответствует концу строки.
Теперь, поскольку ваша строка содержит материал до и после, вам нужно изменить это поведение по умолчанию:
С модификатором Multiline
, ^
соответствует началу строки, а $
- концу строки. Дополнительную информацию см. В документации .
Итак, ваше регулярное выражение должно выглядеть примерно так:
Regex regx = new Regex("(?<=^(\s*Owner))(.|\n)*?(?=\s*Information$)", RegexOptions.Singleline | RegexOptions.Multiline);